home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / AIncludes / QuickTimeMusic.a < prev    next >
Encoding:
Text File  |  1998-02-12  |  92.0 KB  |  2,773 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        QuickTimeMusic.a
  3. ;
  4. ;    Contains:    QuickTime Interfaces.
  5. ;
  6. ;    Version:    Technology:    QuickTime 3.0
  7. ;                Release:    Universal Interfaces 3.1
  8. ;
  9. ;    Copyright:    © 1990-1998 by Apple Computer, Inc., all rights reserved
  10. ;
  11. ;    Bugs?:        Please include the the file and version information (from above) with
  12. ;                the problem description.  Developers belonging to one of the Apple
  13. ;                developer programs can submit bug reports to:
  14. ;
  15. ;                    devsupport@apple.com
  16. ;
  17. ;
  18.     IF &TYPE('__QUICKTIMEMUSIC__') = 'UNDEFINED' THEN
  19. __QUICKTIMEMUSIC__ SET 1
  20.  
  21.     IF &TYPE('__COMPONENTS__') = 'UNDEFINED' THEN
  22.     include 'Components.a'
  23.     ENDIF
  24.     IF &TYPE('__IMAGECOMPRESSION__') = 'UNDEFINED' THEN
  25.     include 'ImageCompression.a'
  26.     ENDIF
  27.     IF &TYPE('__MOVIES__') = 'UNDEFINED' THEN
  28.     include 'Movies.a'
  29.     ENDIF
  30.     IF &TYPE('__QUICKDRAW__') = 'UNDEFINED' THEN
  31.     include 'Quickdraw.a'
  32.     ENDIF
  33.     IF &TYPE('__VIDEO__') = 'UNDEFINED' THEN
  34.     include 'Video.a'
  35.     ENDIF
  36.     IF &TYPE('__MACMEMORY__') = 'UNDEFINED' THEN
  37.     include 'MacMemory.a'
  38.     ENDIF
  39.     IF &TYPE('__SOUND__') = 'UNDEFINED' THEN
  40.     include 'Sound.a'
  41.     ENDIF
  42.     IF &TYPE('__ENDIAN__') = 'UNDEFINED' THEN
  43.     include 'Endian.a'
  44.     ENDIF
  45.  
  46.  
  47. kaiToneDescType                    EQU        'tone'
  48. kaiNoteRequestInfoType            EQU        'ntrq'
  49. kaiKnobListType                    EQU        'knbl'
  50. kaiKeyRangeInfoType                EQU        'sinf'
  51. kaiSampleDescType                EQU        'sdsc'
  52. kaiSampleInfoType                EQU        'smin'
  53. kaiSampleDataType                EQU        'sdat'
  54. kaiSampleDataQUIDType            EQU        'quid'
  55. kaiInstInfoType                    EQU        'iinf'
  56. kaiPictType                        EQU        'pict'
  57. kaiWriterType                    EQU        '©wrt'
  58. kaiCopyrightType                EQU        '©cpy'
  59. kaiOtherStrType                    EQU        'str '
  60. kaiInstrumentRefType            EQU        'iref'
  61. kaiInstGMQualityType            EQU        'qual'
  62. kaiLibraryInfoType                EQU        'linf'
  63. kaiLibraryDescType                EQU        'ldsc'
  64. InstLibDescRec            RECORD 0
  65. libIDName                 ds        Str31            ; offset: $0 (0)
  66. sizeof                     EQU *                    ; size:   $20 (32)
  67.                         ENDR
  68. InstKnobRec                RECORD 0
  69. number                     ds        BigEndianLong    ; offset: $0 (0)
  70. value                     ds        BigEndianLong    ; offset: $4 (4)
  71. sizeof                     EQU *                    ; size:   $8 (8)
  72.                         ENDR
  73.  
  74. kInstKnobMissingUnknown            EQU        0
  75. kInstKnobMissingDefault            EQU        $01
  76. InstKnobList            RECORD 0
  77. knobCount                 ds        BigEndianLong    ; offset: $0 (0)
  78. knobFlags                 ds        BigEndianLong    ; offset: $4 (4)
  79. knob                     ds        InstKnobRec        ; offset: $8 (8) <-- really an array of length one
  80. sizeof                     EQU *                    ; size:   $10 (16)
  81.                         ENDR
  82.  
  83. kMusicLoopTypeNormal            EQU        0
  84. kMusicLoopTypePalindrome        EQU        1                    ; back & forth
  85.  
  86. instSamplePreProcessFlag        EQU        $01
  87. InstSampleDescRec        RECORD 0
  88. dataFormat                 ds        BigEndianOSType ; offset: $0 (0)
  89. numChannels                 ds        BigEndianShort ; offset: $4 (4)
  90. sampleSize                 ds        BigEndianShort ; offset: $6 (6)
  91. sampleRate                 ds        BigEndianUnsignedFixed ; offset: $8 (8)
  92. sampleDataID             ds        BigEndianShort ; offset: $C (12)
  93. offset                     ds        BigEndianLong    ; offset: $E (14)        ;  offset within SampleData - this could be just for internal use
  94. numSamples                 ds        BigEndianLong    ; offset: $12 (18)        ;  this could also just be for internal use, we'll see
  95. loopType                 ds        BigEndianLong    ; offset: $16 (22)
  96. loopStart                 ds        BigEndianLong    ; offset: $1A (26)
  97. loopEnd                     ds        BigEndianLong    ; offset: $1E (30)
  98. pitchNormal                 ds        BigEndianLong    ; offset: $22 (34)
  99. pitchLow                 ds        BigEndianLong    ; offset: $26 (38)
  100. pitchHigh                 ds        BigEndianLong    ; offset: $2A (42)
  101. sizeof                     EQU *                    ; size:   $2E (46)
  102.                         ENDR
  103. ; typedef Handle                         AtomicInstrument
  104.  
  105. ; typedef Ptr                             AtomicInstrumentPtr
  106.  
  107.  
  108. kQTMIDIComponentType            EQU        'midi'
  109.  
  110. kOMSComponentSubType            EQU        'OMS '
  111. kFMSComponentSubType            EQU        'FMS '
  112. kMIDIManagerComponentSubType    EQU        'mmgr'
  113. ; typedef ComponentInstance             QTMIDIComponent
  114.  
  115.  
  116. kMusicPacketPortLost            EQU        1                    ; received when application loses the default input port 
  117. kMusicPacketPortFound            EQU        2                    ; received when application gets it back out from under someone else's claim 
  118. kMusicPacketTimeGap                EQU        3                    ; data[0] = number of milliseconds to keep the MIDI line silent 
  119.  
  120. kAppleSysexID                    EQU        $11                    ; apple sysex is followed by 2-byte command. 0001 is the command for samplesize 
  121. kAppleSysexCmdSampleSize        EQU        $0001                ; 21 bit number in 3 midi bytes follows sysex ID and 2 cmd bytes 
  122. kAppleSysexCmdSampleBreak        EQU        $0002                ; specifies that the sample should break right here 
  123. kAppleSysexCmdAtomicInstrument    EQU        $0010                ; contents of atomic instrument handle 
  124. kAppleSysexCmdDeveloper            EQU        $7F00                ; F0 11 7F 00 ww xx yy zz ... F7 is available for non-Apple developers, where wxyz is unique app signature with 8th bit cleared, unique to developer, and 00 and 7f are reserved 
  125. MusicMIDIPacket            RECORD 0
  126. length                     ds.w    1                ; offset: $0 (0)
  127. reserved                 ds.l    1                ; offset: $2 (2)        ;  if length zero, then reserved = above enum 
  128. data                     ds.b    249                ; offset: $6 (6)
  129.                          ORG 256
  130. sizeof                     EQU *                    ; size:   $100 (256)
  131.                         ENDR
  132.  
  133. kSynthesizerConnectionFMS        EQU        1                    ; this connection imported from FMS 
  134. kSynthesizerConnectionMMgr        EQU        2                    ; this connection imported from the MIDI Mgr 
  135. kSynthesizerConnectionOMS        EQU        4                    ; this connection imported from OMS 
  136. kSynthesizerConnectionQT        EQU        8                    ; this connection is a QuickTime-only port 
  137.                                                             ; lowest four bits are mutually exclusive; combinations reserved for future use.
  138. kSynthesizerConnectionUnavailable EQU    256                    ; port exists, but cannot be used just now 
  139. SynthesizerConnections    RECORD 0
  140. clientID                 ds.l    1                ; offset: $0 (0)
  141. inputPortID                 ds.l    1                ; offset: $4 (4)        ;  terminology death: this port is used to SEND to the midi synth 
  142. outputPortID             ds.l    1                ; offset: $8 (8)        ;  terminology death: this port receives from a keyboard or other control device 
  143. midiChannel                 ds.l    1                ; offset: $C (12)        ;  The system channel; others are configurable (or the nubus slot number) 
  144. flags                     ds.l    1                ; offset: $10 (16)
  145. unique                     ds.l    1                ; offset: $14 (20)        ;  unique id may be used instead of index, to getinfo and unregister calls 
  146. reserved1                 ds.l    1                ; offset: $18 (24)        ;  should be zero 
  147. reserved2                 ds.l    1                ; offset: $1C (28)        ;  should be zero 
  148. sizeof                     EQU *                    ; size:   $20 (32)
  149.                         ENDR
  150. QTMIDIPort                RECORD 0
  151. portConnections             ds        SynthesizerConnections ; offset: $0 (0)
  152. portName                 ds        Str63            ; offset: $20 (32)
  153. sizeof                     EQU *                    ; size:   $60 (96)
  154.                         ENDR
  155. QTMIDIPortList            RECORD 0
  156. portCount                 ds.w    1                ; offset: $0 (0)
  157. port                     ds        QTMIDIPort        ; offset: $2 (2) <-- really an array of length one
  158. sizeof                     EQU *                    ; size:   $62 (98)
  159.                         ENDR
  160. ; typedef struct QTMIDIPortList *        QTMIDIPortListPtr
  161.  
  162. ; typedef QTMIDIPortListPtr *            QTMIDIPortListHandle
  163.  
  164. ;
  165. ; pascal ComponentResult QTMIDIGetMIDIPorts(QTMIDIComponent ci, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
  166. ;
  167.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  168.         Macro
  169.         _QTMIDIGetMIDIPorts
  170.             move.l              #$00080001,-(sp)
  171.             moveq               #0,D0
  172.             dc.w                $A82A
  173.         EndM
  174.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  175.         IMPORT_CFM_FUNCTION QTMIDIGetMIDIPorts
  176.     ENDIF
  177.  
  178. ;
  179. ; pascal ComponentResult QTMIDIUseSendPort(QTMIDIComponent ci, long portIndex, long inUse)
  180. ;
  181.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  182.         Macro
  183.         _QTMIDIUseSendPort
  184.             move.l              #$00080002,-(sp)
  185.             moveq               #0,D0
  186.             dc.w                $A82A
  187.         EndM
  188.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  189.         IMPORT_CFM_FUNCTION QTMIDIUseSendPort
  190.     ENDIF
  191.  
  192. ;
  193. ; pascal ComponentResult QTMIDISendMIDI(QTMIDIComponent ci, long portIndex, MusicMIDIPacket *mp)
  194. ;
  195.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  196.         Macro
  197.         _QTMIDISendMIDI
  198.             move.l              #$00080003,-(sp)
  199.             moveq               #0,D0
  200.             dc.w                $A82A
  201.         EndM
  202.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  203.         IMPORT_CFM_FUNCTION QTMIDISendMIDI
  204.     ENDIF
  205.  
  206. ;
  207. ; pascal ComponentResult QTMIDIUseReceivePort(QTMIDIComponent ci, long portIndex, MusicMIDIReadHookUPP readHook, long refCon)
  208. ;
  209.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  210.         Macro
  211.         _QTMIDIUseReceivePort
  212.             move.l              #$000C0004,-(sp)
  213.             moveq               #0,D0
  214.             dc.w                $A82A
  215.         EndM
  216.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  217.         IMPORT_CFM_FUNCTION QTMIDIUseReceivePort
  218.     ENDIF
  219.  
  220.  
  221.  
  222.  
  223. kMusicComponentType                EQU        'musi'
  224. kInstrumentComponentType        EQU        'inst'
  225.  
  226. kSoftSynthComponentSubType        EQU        'ss  '
  227. kGMSynthComponentSubType        EQU        'gm  '
  228.  
  229. ; typedef ComponentInstance             MusicComponent
  230.  
  231. ;  MusicSynthesizerFlags
  232.  
  233. kSynthesizerDynamicVoice        EQU        $01                    ; can assign voices on the fly (else, polyphony is very important 
  234. kSynthesizerUsesMIDIPort        EQU        $02                    ; must be patched through MIDI Manager 
  235. kSynthesizerMicrotone            EQU        $04                    ; can play microtonal scales 
  236. kSynthesizerHasSamples            EQU        $08                    ; synthesizer has some use for sampled data 
  237. kSynthesizerMixedDrums            EQU        $10                    ; any part can play drum parts, total = instrument parts 
  238. kSynthesizerSoftware            EQU        $20                    ; implemented in main CPU software == uses cpu cycles 
  239. kSynthesizerHardware            EQU        $40                    ; is a hardware device (such as nubus, or maybe DSP?) 
  240. kSynthesizerDynamicChannel        EQU        $80                    ; can move any part to any channel or disable each part. (else we assume it lives on all channels in masks) 
  241. kSynthesizerHogsSystemChannel    EQU        $0100                ; can be channelwise dynamic, but always responds on its system channel 
  242. kSynthesizerHasSystemChannel    EQU        $0200                ; has some "system channel" notion to distinguish it from multiple instances of the same device (GM devices dont) 
  243. kSynthesizerSlowSetPart            EQU        $0400                ; SetPart() and SetPartInstrumentNumber() calls do not have rapid response, may glitch notes 
  244. kSynthesizerOffline                EQU        $1000                ; can enter an offline synthesis mode 
  245. kSynthesizerGM                    EQU        $4000                ; synth is a GM device 
  246. kSynthesizerDLS                    EQU        $8000                ; synth supports DLS level 1 
  247. kSynthesizerSoundLocalization    EQU        $00010000            ; synth supports extremely baroque, nonstandard, and proprietary "apple game sprockets" localization parameter set 
  248. ; * Note that these controller numbers
  249. ; * are _not_ identical to the MIDI controller numbers.
  250. ; * These are _signed_ 8.8 values, and the LSB's are
  251. ; * always sent to a MIDI device. Controllers 32-63 are
  252. ; * reserved (for MIDI, they are LSB's for 0-31, but we
  253. ; * always send both).
  254. ; *
  255. ; * The full range, therefore, is -128.00 to 127.7f.
  256. ; *
  257. ; * _Excepting_ _volume_, all controls default to zero.
  258. ; *
  259. ; * Pitch bend is specified in fractional semitones! No
  260. ; * more "pitch bend range" nonsense. You can bend as far
  261. ; * as you want, any time you want.
  262.  
  263. ; typedef SInt32                         MusicController
  264.  
  265.  
  266. kControllerModulationWheel        EQU        1
  267. kControllerBreath                EQU        2
  268. kControllerFoot                    EQU        4
  269. kControllerPortamentoTime        EQU        5                    ; time in 8.8 seconds, portamento on/off is omitted, 0 time = 'off' 
  270. kControllerVolume                EQU        7                    ; main volume control 
  271. kControllerBalance                EQU        8
  272. kControllerPan                    EQU        10                    ; 0 - "default", 1 - n: positioned in output 1-n (incl fractions) 
  273. kControllerExpression            EQU        11                    ; secondary volume control 
  274. kControllerLever1                EQU        16                    ; general purpose controllers 
  275. kControllerLever2                EQU        17                    ; general purpose controllers 
  276. kControllerLever3                EQU        18                    ; general purpose controllers 
  277. kControllerLever4                EQU        19                    ; general purpose controllers 
  278. kControllerLever5                EQU        80                    ; general purpose controllers 
  279. kControllerLever6                EQU        81                    ; general purpose controllers 
  280. kControllerLever7                EQU        82                    ; general purpose controllers 
  281. kControllerLever8                EQU        83                    ; general purpose controllers 
  282. kControllerPitchBend            EQU        32                    ; positive & negative semitones, with 8 bits fraction, same units as transpose controllers
  283. kControllerAfterTouch            EQU        33                    ; aka channel pressure 
  284. kControllerPartTranspose        EQU        40                    ; identical to pitchbend, for overall part xpose 
  285. kControllerTuneTranspose        EQU        41                    ; another pitchbend, for "song global" pitch offset 
  286. kControllerPartVolume            EQU        42                    ; another volume control, passed right down from note allocator part volume 
  287. kControllerTuneVolume            EQU        43                    ; another volume control, used for "song global" volume - since we share one synthesizer across multiple tuneplayers
  288. kControllerSustain                EQU        64                    ; boolean - positive for on, 0 or negative off 
  289. kControllerPortamento            EQU        65                    ; boolean
  290. kControllerSostenuto            EQU        66                    ; boolean 
  291. kControllerSoftPedal            EQU        67                    ; boolean 
  292. kControllerReverb                EQU        91
  293. kControllerTremolo                EQU        92
  294. kControllerChorus                EQU        93
  295. kControllerCeleste                EQU        94
  296. kControllerPhaser                EQU        95
  297. kControllerEditPart                EQU        113                    ; last 16 controllers 113-128 and above are global controllers which respond on part zero 
  298. kControllerMasterTune            EQU        114
  299. kControllerMasterTranspose        EQU        114                    ; preferred
  300. kControllerMasterVolume            EQU        115
  301. kControllerMasterCPULoad        EQU        116
  302. kControllerMasterPolyphony        EQU        117
  303. kControllerMasterFeatures        EQU        118
  304.  
  305. ;  ID's of knobs supported by the QuickTime Music Synthesizer built into QuickTime
  306.  
  307.  
  308. kQTMSKnobStartID                EQU        $02000000
  309. kQTMSKnobVolumeAttackTimeID        EQU        $02000001
  310. kQTMSKnobVolumeDecayTimeID        EQU        $02000002
  311. kQTMSKnobVolumeSustainLevelID    EQU        $02000003
  312. kQTMSKnobVolumeRelease1RateID    EQU        $02000004
  313. kQTMSKnobVolumeDecayKeyScalingID EQU    $02000005
  314. kQTMSKnobVolumeReleaseTimeID    EQU        $02000006
  315. kQTMSKnobVolumeLFODelayID        EQU        $02000007
  316. kQTMSKnobVolumeLFORampTimeID    EQU        $02000008
  317. kQTMSKnobVolumeLFOPeriodID        EQU        $02000009
  318. kQTMSKnobVolumeLFOShapeID        EQU        $0200000A
  319. kQTMSKnobVolumeLFODepthID        EQU        $0200000B
  320. kQTMSKnobVolumeOverallID        EQU        $0200000C
  321. kQTMSKnobVolumeVelocity127ID    EQU        $0200000D
  322. kQTMSKnobVolumeVelocity96ID        EQU        $0200000E
  323. kQTMSKnobVolumeVelocity64ID        EQU        $0200000F
  324. kQTMSKnobVolumeVelocity32ID        EQU        $02000010
  325. kQTMSKnobVolumeVelocity16ID        EQU        $02000011            ; Pitch related knobs
  326. kQTMSKnobPitchTransposeID        EQU        $02000012
  327. kQTMSKnobPitchLFODelayID        EQU        $02000013
  328. kQTMSKnobPitchLFORampTimeID        EQU        $02000014
  329. kQTMSKnobPitchLFOPeriodID        EQU        $02000015
  330. kQTMSKnobPitchLFOShapeID        EQU        $02000016
  331. kQTMSKnobPitchLFODepthID        EQU        $02000017
  332. kQTMSKnobPitchLFOQuantizeID        EQU        $02000018            ; Stereo related knobs
  333. kQTMSKnobStereoDefaultPanID        EQU        $02000019
  334. kQTMSKnobStereoPositionKeyScalingID EQU    $0200001A
  335. kQTMSKnobPitchLFOOffsetID        EQU        $0200001B
  336. kQTMSKnobExclusionGroupID        EQU        $0200001C            ; Misc knobs, late additions
  337. kQTMSKnobSustainTimeID            EQU        $0200001D
  338. kQTMSKnobSustainInfiniteID        EQU        $0200001E
  339. kQTMSKnobVolumeLFOStereoID        EQU        $0200001F
  340. kQTMSKnobVelocityLowID            EQU        $02000020
  341. kQTMSKnobVelocityHighID            EQU        $02000021
  342. kQTMSKnobVelocitySensitivityID    EQU        $02000022
  343. kQTMSKnobPitchSensitivityID        EQU        $02000023
  344. kQTMSKnobVolumeLFODepthFromWheelID EQU    $02000024
  345. kQTMSKnobPitchLFODepthFromWheelID EQU    $02000025            ; Volume Env again
  346. kQTMSKnobVolumeExpOptionsID        EQU        $02000026            ; Env1
  347. kQTMSKnobEnv1AttackTimeID        EQU        $02000027
  348. kQTMSKnobEnv1DecayTimeID        EQU        $02000028
  349. kQTMSKnobEnv1SustainLevelID        EQU        $02000029
  350. kQTMSKnobEnv1SustainTimeID        EQU        $0200002A
  351. kQTMSKnobEnv1SustainInfiniteID    EQU        $0200002B
  352. kQTMSKnobEnv1ReleaseTimeID        EQU        $0200002C
  353. kQTMSKnobEnv1ExpOptionsID        EQU        $0200002D            ; Env2
  354. kQTMSKnobEnv2AttackTimeID        EQU        $0200002E
  355. kQTMSKnobEnv2DecayTimeID        EQU        $0200002F
  356. kQTMSKnobEnv2SustainLevelID        EQU        $02000030
  357. kQTMSKnobEnv2SustainTimeID        EQU        $02000031
  358. kQTMSKnobEnv2SustainInfiniteID    EQU        $02000032
  359. kQTMSKnobEnv2ReleaseTimeID        EQU        $02000033
  360. kQTMSKnobEnv2ExpOptionsID        EQU        $02000034            ; Pitch Env
  361. kQTMSKnobPitchEnvelopeID        EQU        $02000035
  362. kQTMSKnobPitchEnvelopeDepthID    EQU        $02000036            ; Filter
  363. kQTMSKnobFilterKeyFollowID        EQU        $02000037
  364. kQTMSKnobFilterTransposeID        EQU        $02000038
  365. kQTMSKnobFilterQID                EQU        $02000039
  366. kQTMSKnobFilterFrequencyEnvelopeID EQU    $0200003A
  367. kQTMSKnobFilterFrequencyEnvelopeDepthID EQU $0200003B
  368. kQTMSKnobFilterQEnvelopeID        EQU        $0200003C
  369. kQTMSKnobFilterQEnvelopeDepthID    EQU        $0200003D            ; Reverb Threshhold
  370. kQTMSKnobReverbThresholdID        EQU        $0200003E
  371. kQTMSKnobVolumeAttackVelScalingID EQU    $0200003F
  372. kQTMSKnobLastIDPlus1            EQU        $02000040
  373.  
  374.  
  375.  
  376.  
  377. kControllerMaximum                EQU        $00007FFF            ; +01111111.11111111 
  378. kControllerMinimum                EQU        $FFFF8000            ; -10000000.00000000 
  379. SynthesizerDescription    RECORD 0
  380. synthesizerType             ds.l    1                ; offset: $0 (0)        ;  synthesizer type (must be same as component subtype) 
  381. name                     ds        Str31            ; offset: $4 (4)        ;  text name of synthesizer type 
  382. flags                     ds.l    1                ; offset: $24 (36)        ;  from the above enum 
  383. voiceCount                 ds.l    1                ; offset: $28 (40)        ;  maximum polyphony 
  384. partCount                 ds.l    1                ; offset: $2C (44)        ;  maximum multi-timbrality (and midi channels) 
  385. instrumentCount             ds.l    1                ; offset: $30 (48)        ;  non gm, built in (rom) instruments only 
  386. modifiableInstrumentCount  ds.l    1                ; offset: $34 (52)        ;  plus n-more are user modifiable 
  387. channelMask                 ds.l    1                ; offset: $38 (56)        ;  (midi device only) which channels device always uses 
  388. drumPartCount             ds.l    1                ; offset: $3C (60)        ;  maximum multi-timbrality of drum parts 
  389. drumCount                 ds.l    1                ; offset: $40 (64)        ;  non gm, built in (rom) drumkits only 
  390. modifiableDrumCount         ds.l    1                ; offset: $44 (68)        ;  plus n-more are user modifiable 
  391. drumChannelMask             ds.l    1                ; offset: $48 (72)        ;  (midi device only) which channels device always uses 
  392. outputCount                 ds.l    1                ; offset: $4C (76)        ;  number of audio outputs (usually two) 
  393. latency                     ds.l    1                ; offset: $50 (80)        ;  response time in µSec 
  394. controllers                 ds.l    4                ; offset: $54 (84)        ;  array of 128 bits 
  395. gmInstruments             ds.l    4                ; offset: $64 (100)        ;  array of 128 bits 
  396. gmDrums                     ds.l    4                ; offset: $74 (116)        ;  array of 128 bits 
  397. sizeof                     EQU *                    ; size:   $84 (132)
  398.                         ENDR
  399.  
  400. kVoiceCountDynamic                EQU        -1                    ; constant to use to specify dynamic voicing 
  401.  
  402. ToneDescription            RECORD 0
  403. synthesizerType             ds        BigEndianOSType ; offset: $0 (0)        ;  synthesizer type 
  404. synthesizerName             ds        Str31            ; offset: $4 (4)        ;  name of instantiation of synth 
  405. instrumentName             ds        Str31            ; offset: $24 (36)        ;  preferred name for human use 
  406. instrumentNumber         ds        BigEndianLong    ; offset: $44 (68)        ;  inst-number used if synth-name matches 
  407. gmNumber                 ds        BigEndianLong    ; offset: $48 (72)        ;  Best matching general MIDI number 
  408. sizeof                     EQU *                    ; size:   $4C (76)
  409.                         ENDR
  410.  
  411. kFirstGMInstrument                EQU        $00000001
  412. kLastGMInstrument                EQU        $00000080
  413. kFirstGSInstrument                EQU        $00000081
  414. kLastGSInstrument                EQU        $00003FFF
  415. kFirstDrumkit                    EQU        $00004000            ; (first value is "no drum". instrument numbers from 16384->16384+128 are drumkits, and for GM they are _defined_ drumkits! 
  416. kLastDrumkit                    EQU        $00004080
  417. kFirstROMInstrument                EQU        $00008000
  418. kLastROMInstrument                EQU        $0000FFFF
  419. kFirstUserInstrument            EQU        $00010000
  420. kLastUserInstrument                EQU        $0001FFFF
  421. ;  InstrumentMatch
  422.  
  423. kInstrumentMatchSynthesizerType    EQU        1
  424. kInstrumentMatchSynthesizerName    EQU        2
  425. kInstrumentMatchName            EQU        4
  426. kInstrumentMatchNumber            EQU        8
  427. kInstrumentMatchGMNumber        EQU        16
  428. kInstrumentMatchGSNumber        EQU        32
  429. ;  KnobFlags
  430.  
  431. kKnobBasic                        EQU        8                    ; knob shows up in certain simplified lists of knobs 
  432. kKnobReadOnly                    EQU        16                    ; knob value cannot be changed by user or with a SetKnob call 
  433. kKnobInterruptUnsafe            EQU        32                    ; only alter this knob from foreground task time (may access toolbox) 
  434. kKnobKeyrangeOverride            EQU        64                    ; knob can be overridden within a single keyrange (software synth only) 
  435. kKnobGroupStart                    EQU        128                    ; knob is first in some logical group of knobs 
  436. kKnobFixedPoint8                EQU        1024
  437. kKnobFixedPoint16                EQU        2048                ; One of these may be used at a time. 
  438. kKnobTypeNumber                    EQU        $00
  439. kKnobTypeGroupName                EQU        $1000                ; "knob" is really a group name for display purposes 
  440. kKnobTypeBoolean                EQU        $2000                ; if range is greater than 1, its a multi-checkbox field 
  441. kKnobTypeNote                    EQU        $3000                ; knob range is equivalent to MIDI keys 
  442. kKnobTypePan                    EQU        $4000                ; range goes left/right (lose this? ) 
  443. kKnobTypeInstrument                EQU        $5000                ; knob value = reference to another instrument number 
  444. kKnobTypeSetting                EQU        $6000                ; knob value is 1 of n different things (eg, fm algorithms) popup menu 
  445. kKnobTypeMilliseconds            EQU        $7000                ; knob is a millisecond time range 
  446. kKnobTypePercentage                EQU        $8000                ; knob range is displayed as a Percentage 
  447. kKnobTypeHertz                    EQU        $9000                ; knob represents frequency 
  448. kKnobTypeButton                    EQU        $A000                ; momentary trigger push button 
  449.  
  450.  
  451. kUnknownKnobValue                EQU        $7FFFFFFF            ; a knob with this value means, we don't know it. 
  452. kDefaultKnobValue                EQU        $7FFFFFFE            ; used to SET a knob to its default value. 
  453. KnobDescription            RECORD 0
  454. name                     ds        Str63            ; offset: $0 (0)
  455. lowValue                 ds.l    1                ; offset: $40 (64)
  456. highValue                 ds.l    1                ; offset: $44 (68)
  457. defaultValue             ds.l    1                ; offset: $48 (72)        ;  a default instrument is made of all default values 
  458. flags                     ds.l    1                ; offset: $4C (76)
  459. knobID                     ds.l    1                ; offset: $50 (80)
  460. sizeof                     EQU *                    ; size:   $54 (84)
  461.                         ENDR
  462. GCInstrumentData        RECORD 0
  463. tone                     ds        ToneDescription ; offset: $0 (0)
  464. knobCount                 ds.l    1                ; offset: $4C (76)
  465. knob                     ds.l    1                ; offset: $50 (80) <-- really an array of length one
  466. sizeof                     EQU *                    ; size:   $54 (84)
  467.                         ENDR
  468. ; typedef struct GCInstrumentData *        GCInstrumentDataPtr
  469.  
  470. ; typedef GCInstrumentDataPtr *            GCInstrumentDataHandle
  471.  
  472. InstrumentAboutInfo        RECORD 0
  473. p                         ds.l    1                ; offset: $0 (0)
  474. author                     ds        Str255            ; offset: $4 (4)
  475. copyright                 ds        Str255            ; offset: $104 (260)
  476. other                     ds        Str255            ; offset: $204 (516)
  477. sizeof                     EQU *                    ; size:   $304 (772)
  478.                         ENDR
  479.  
  480.  
  481. notImplementedMusicErr            EQU        $8000F7E9
  482. cantSendToSynthesizerErr        EQU        $8000F7E8
  483. cantReceiveFromSynthesizerErr    EQU        $8000F7E7
  484. illegalVoiceAllocationErr        EQU        $8000F7E6
  485. illegalPartErr                    EQU        $8000F7E5
  486. illegalChannelErr                EQU        $8000F7E4
  487. illegalKnobErr                    EQU        $8000F7E3
  488. illegalKnobValueErr                EQU        $8000F7E2
  489. illegalInstrumentErr            EQU        $8000F7E1
  490. illegalControllerErr            EQU        $8000F7E0
  491. midiManagerAbsentErr            EQU        $8000F7DF
  492. synthesizerNotRespondingErr        EQU        $8000F7DE
  493. synthesizerErr                    EQU        $8000F7DD
  494. illegalNoteChannelErr            EQU        $8000F7DC
  495. noteChannelNotAllocatedErr        EQU        $8000F7DB
  496. tunePlayerFullErr                EQU        $8000F7DA
  497. tuneParseErr                    EQU        $8000F7D9
  498.  
  499. kGetAtomicInstNoExpandedSamples    EQU        $01
  500. kGetAtomicInstNoOriginalSamples    EQU        $02
  501. kGetAtomicInstNoSamples            EQU        $03
  502. kGetAtomicInstNoKnobList        EQU        $04
  503. kGetAtomicInstNoInstrumentInfo    EQU        $08
  504. kGetAtomicInstOriginalKnobList    EQU        $10
  505. kGetAtomicInstAllKnobs            EQU        $20                    ; return even those that are set to default
  506.  
  507. ;   For non-gm instruments, instrument number of tone description == 0
  508. ;   If you want to speed up while running, slam the inst num with what Get instrument number returns
  509. ;   All missing knobs are slammed to the default value
  510.  
  511.  
  512.  
  513. kSetAtomicInstKeepOriginalInstrument EQU $01
  514. kSetAtomicInstShareAcrossParts    EQU        $02                    ; inst disappears when app goes away
  515. kSetAtomicInstCallerTosses        EQU        $04                    ; the caller isn't keeping a copy around (for NASetAtomicInstrument)
  516. kSetAtomicInstCallerGuarantees    EQU        $08                    ; the caller guarantees a copy is around
  517. kSetAtomicInstInterruptSafe        EQU        $10                    ; dont move memory at this time (but process at next task time)
  518. kSetAtomicInstDontPreprocess    EQU        $80                    ; perform no further preprocessing because either 1)you know the instrument is digitally clean, or 2) you got it from a GetPartAtomic
  519.  
  520. kInstrumentNamesModifiable        EQU        1
  521. kInstrumentNamesBoth            EQU        2
  522. ; * Structures specific to the GenericMusicComponent
  523.  
  524.  
  525.  
  526. kGenericMusicComponentSubtype    EQU        'gene'
  527. GenericKnobDescription    RECORD 0
  528. kd                         ds        KnobDescription ; offset: $0 (0)
  529. hw1                         ds.l    1                ; offset: $54 (84)        ;  driver defined 
  530. hw2                         ds.l    1                ; offset: $58 (88)        ;  driver defined 
  531. hw3                         ds.l    1                ; offset: $5C (92)        ;  driver defined 
  532. settingsID                 ds.l    1                ; offset: $60 (96)        ;  resource ID list for boolean and popup names 
  533. sizeof                     EQU *                    ; size:   $64 (100)
  534.                         ENDR
  535. GenericKnobDescriptionList RECORD 0
  536. knobCount                 ds.l    1                ; offset: $0 (0)
  537. knob                     ds        GenericKnobDescription ; offset: $4 (4) <-- really an array of length one
  538. sizeof                     EQU *                    ; size:   $68 (104)
  539.                         ENDR
  540. ; typedef struct GenericKnobDescriptionList * GenericKnobDescriptionListPtr
  541.  
  542. ; typedef GenericKnobDescriptionListPtr * GenericKnobDescriptionListHandle
  543.  
  544. ;  knobTypes for MusicDerivedSetKnob 
  545.  
  546. kGenericMusicKnob                EQU        1
  547. kGenericMusicInstrumentKnob        EQU        2
  548. kGenericMusicDrumKnob            EQU        3
  549. kGenericMusicGlobalController    EQU        4
  550.  
  551.  
  552.  
  553. kGenericMusicResFirst            EQU        0
  554. kGenericMusicResMiscStringList    EQU        1                    ; STR# 1: synth name, 2:about author,3:aboutcopyright,4:aboutother 
  555. kGenericMusicResMiscLongList    EQU        2                    ; Long various params, see list below 
  556. kGenericMusicResInstrumentList    EQU        3                    ; NmLs of names and shorts, categories prefixed by '••' 
  557. kGenericMusicResDrumList        EQU        4                    ; NmLs of names and shorts 
  558. kGenericMusicResInstrumentKnobDescriptionList EQU 5            ; Knob 
  559. kGenericMusicResDrumKnobDescriptionList EQU 6                ; Knob 
  560. kGenericMusicResKnobDescriptionList EQU    7                    ; Knob 
  561. kGenericMusicResBitsLongList    EQU        8                    ; Long back to back bitmaps of controllers, gminstruments, and drums 
  562. kGenericMusicResModifiableInstrumentHW EQU 9                ; Shrt same as the hw shorts trailing the instrument names, a shortlist 
  563. kGenericMusicResGMTranslation    EQU        10                    ; Long 128 long entries, 1 for each gm inst, of local instrument numbers 1-n (not hw numbers) 
  564. kGenericMusicResROMInstrumentData EQU    11                    ; knob lists for ROM instruments, so the knob values may be known 
  565. kGenericMusicResAboutPICT        EQU        12                    ; picture for aboutlist. must be present for GetAbout call to work 
  566. kGenericMusicResLast            EQU        13
  567. ;  elements of the misc long list 
  568.  
  569. kGenericMusicMiscLongFirst        EQU        0
  570. kGenericMusicMiscLongVoiceCount    EQU        1
  571. kGenericMusicMiscLongPartCount    EQU        2
  572. kGenericMusicMiscLongModifiableInstrumentCount EQU 3
  573. kGenericMusicMiscLongChannelMask EQU    4
  574. kGenericMusicMiscLongDrumPartCount EQU    5
  575. kGenericMusicMiscLongModifiableDrumCount EQU 6
  576. kGenericMusicMiscLongDrumChannelMask EQU 7
  577. kGenericMusicMiscLongOutputCount EQU    8
  578. kGenericMusicMiscLongLatency    EQU        9
  579. kGenericMusicMiscLongFlags        EQU        10
  580. kGenericMusicMiscLongFirstGMHW    EQU        11                    ; number to add to locate GM main instruments 
  581. kGenericMusicMiscLongFirstGMDrumHW EQU    12                    ; number to add to locate GM drumkits 
  582. kGenericMusicMiscLongFirstUserHW EQU    13                    ; First hw number of user instruments (presumed sequential) 
  583. kGenericMusicMiscLongLast        EQU        14
  584. GCPart                    RECORD 0
  585. hwInstrumentNumber         ds.l    1                ; offset: $0 (0)        ;  internal number of recalled instrument 
  586. controller                 ds.w    128                ; offset: $4 (4)        ;  current values for all controllers 
  587. volume                     ds.l    1                ; offset: $104 (260)    ;  ctrl 7 is special case 
  588. polyphony                 ds.l    1                ; offset: $108 (264)
  589. midiChannel                 ds.l    1                ; offset: $10C (268)    ;  1-16 if in use 
  590. id                         ds        GCInstrumentData ; offset: $110 (272)    ;  ToneDescription & knoblist, uncertain length 
  591. sizeof                     EQU *                    ; size:   $164 (356)
  592.                         ENDR
  593. ; * Calls specific to the GenericMusicComponent
  594.  
  595.  
  596. kMusicGenericRange                EQU        $0100
  597. kMusicDerivedRange                EQU        $0200
  598. ; * Flags in GenericMusicConfigure call
  599.  
  600.  
  601. kGenericMusicDoMIDI                EQU        $01                    ; implement normal MIDI messages for note, controllers, and program changes 0-127 
  602. kGenericMusicBank0                EQU        $02                    ; implement instrument bank changes on controller 0 
  603. kGenericMusicBank32                EQU        $04                    ; implement instrument bank changes on controller 32 
  604. kGenericMusicErsatzMIDI            EQU        $08                    ; construct MIDI packets, but send them to the derived component 
  605. kGenericMusicCallKnobs            EQU        $10                    ; call the derived component with special knob format call 
  606. kGenericMusicCallParts            EQU        $20                    ; call the derived component with special part format call 
  607. kGenericMusicCallInstrument        EQU        $40                    ; call MusicDerivedSetInstrument for MusicSetInstrument calls 
  608. kGenericMusicCallNumber            EQU        $80                    ; call MusicDerivedSetPartInstrumentNumber for MusicSetPartInstrumentNumber calls, & don't send any C0 or bank stuff 
  609. kGenericMusicCallROMInstrument    EQU        $0100                ; call MusicSetInstrument for MusicSetPartInstrumentNumber for "ROM" instruments, passing params from the ROMi resource 
  610. kGenericMusicAllDefaults        EQU        $0200                ; indicates that when a new instrument is recalled, all knobs are reset to DEFAULT settings. True for GS modules 
  611.  
  612.  
  613.  
  614.  
  615. OfflineSampleType        RECORD 0
  616. numChannels                 ds.l    1                ; offset: $0 (0)        ; number of channels,  ie mono = 1
  617. sampleRate                 ds.l    1                ; offset: $4 (4)        ; sample rate in Apples Fixed point representation
  618. sampleSize                 ds.w    1                ; offset: $8 (8)        ; number of bits in sample
  619. sizeof                     EQU *                    ; size:   $A (10)
  620.                         ENDR
  621. InstrumentInfoRecord    RECORD 0
  622. instrumentNumber         ds.l    1                ; offset: $0 (0)        ;  instrument number (if 0, name is a catagory)
  623. flags                     ds.l    1                ; offset: $4 (4)        ;  show in picker, etc.
  624. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  625. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  626. sizeof                     EQU *                    ; size:   $10 (16)
  627.                         ENDR
  628. InstrumentInfoList        RECORD 0
  629. recordCount                 ds.l    1                ; offset: $0 (0)
  630. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  631. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itxt/name atoms for instruments
  632. info                     ds        InstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  633. sizeof                     EQU *                    ; size:   $1C (28)
  634.                         ENDR
  635. ; typedef struct InstrumentInfoList *    InstrumentInfoListPtr
  636.  
  637. ; typedef InstrumentInfoListPtr *        InstrumentInfoListHandle
  638.  
  639. ;
  640. ; pascal ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
  641. ;
  642.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  643.         Macro
  644.         _MusicGetDescription
  645.             move.l              #$00040001,-(sp)
  646.             moveq               #0,D0
  647.             dc.w                $A82A
  648.         EndM
  649.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  650.         IMPORT_CFM_FUNCTION MusicGetDescription
  651.     ENDIF
  652.  
  653. ;
  654. ; pascal ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
  655. ;
  656.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  657.         Macro
  658.         _MusicGetPart
  659.             move.l              #$000C0002,-(sp)
  660.             moveq               #0,D0
  661.             dc.w                $A82A
  662.         EndM
  663.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  664.         IMPORT_CFM_FUNCTION MusicGetPart
  665.     ENDIF
  666.  
  667. ;
  668. ; pascal ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
  669. ;
  670.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  671.         Macro
  672.         _MusicSetPart
  673.             move.l              #$000C0003,-(sp)
  674.             moveq               #0,D0
  675.             dc.w                $A82A
  676.         EndM
  677.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  678.         IMPORT_CFM_FUNCTION MusicSetPart
  679.     ENDIF
  680.  
  681. ;
  682. ; pascal ComponentResult MusicSetPartInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
  683. ;
  684.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  685.         Macro
  686.         _MusicSetPartInstrumentNumber
  687.             move.l              #$00080004,-(sp)
  688.             moveq               #0,D0
  689.             dc.w                $A82A
  690.         EndM
  691.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  692.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumber
  693.     ENDIF
  694.  
  695.  
  696. ;
  697. ; pascal ComponentResult MusicGetPartInstrumentNumber(MusicComponent mc, long part)
  698. ;
  699.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  700.         Macro
  701.         _MusicGetPartInstrumentNumber
  702.             move.l              #$00040005,-(sp)
  703.             moveq               #0,D0
  704.             dc.w                $A82A
  705.         EndM
  706.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  707.         IMPORT_CFM_FUNCTION MusicGetPartInstrumentNumber
  708.     ENDIF
  709.  
  710. ;
  711. ; pascal ComponentResult MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber)
  712. ;
  713.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  714.         Macro
  715.         _MusicStorePartInstrument
  716.             move.l              #$00080006,-(sp)
  717.             moveq               #0,D0
  718.             dc.w                $A82A
  719.         EndM
  720.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  721.         IMPORT_CFM_FUNCTION MusicStorePartInstrument
  722.     ENDIF
  723.  
  724.  
  725. ;
  726. ; pascal ComponentResult MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
  727. ;
  728.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  729.         Macro
  730.         _MusicGetPartAtomicInstrument
  731.             move.l              #$000C0009,-(sp)
  732.             moveq               #0,D0
  733.             dc.w                $A82A
  734.         EndM
  735.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  736.         IMPORT_CFM_FUNCTION MusicGetPartAtomicInstrument
  737.     ENDIF
  738.  
  739. ;
  740. ; pascal ComponentResult MusicSetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
  741. ;
  742.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  743.         Macro
  744.         _MusicSetPartAtomicInstrument
  745.             move.l              #$000C000A,-(sp)
  746.             moveq               #0,D0
  747.             dc.w                $A82A
  748.         EndM
  749.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  750.         IMPORT_CFM_FUNCTION MusicSetPartAtomicInstrument
  751.     ENDIF
  752.  
  753.  
  754. ;  Obsolete calls
  755. ;
  756. ; pascal ComponentResult MusicGetInstrumentKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  757. ;
  758.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  759.         Macro
  760.         _MusicGetInstrumentKnobDescriptionObsolete
  761.             move.l              #$0008000D,-(sp)
  762.             moveq               #0,D0
  763.             dc.w                $A82A
  764.         EndM
  765.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  766.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescriptionObsolete
  767.     ENDIF
  768.  
  769. ;
  770. ; pascal ComponentResult MusicGetDrumKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  771. ;
  772.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  773.         Macro
  774.         _MusicGetDrumKnobDescriptionObsolete
  775.             move.l              #$0008000E,-(sp)
  776.             moveq               #0,D0
  777.             dc.w                $A82A
  778.         EndM
  779.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  780.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescriptionObsolete
  781.     ENDIF
  782.  
  783. ;
  784. ; pascal ComponentResult MusicGetKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  785. ;
  786.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  787.         Macro
  788.         _MusicGetKnobDescriptionObsolete
  789.             move.l              #$0008000F,-(sp)
  790.             moveq               #0,D0
  791.             dc.w                $A82A
  792.         EndM
  793.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  794.         IMPORT_CFM_FUNCTION MusicGetKnobDescriptionObsolete
  795.     ENDIF
  796.  
  797. ;
  798. ; pascal ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobID)
  799. ;
  800.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  801.         Macro
  802.         _MusicGetPartKnob
  803.             move.l              #$00080010,-(sp)
  804.             moveq               #0,D0
  805.             dc.w                $A82A
  806.         EndM
  807.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  808.         IMPORT_CFM_FUNCTION MusicGetPartKnob
  809.     ENDIF
  810.  
  811. ;
  812. ; pascal ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue)
  813. ;
  814.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  815.         Macro
  816.         _MusicSetPartKnob
  817.             move.l              #$000C0011,-(sp)
  818.             moveq               #0,D0
  819.             dc.w                $A82A
  820.         EndM
  821.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  822.         IMPORT_CFM_FUNCTION MusicSetPartKnob
  823.     ENDIF
  824.  
  825. ;
  826. ; pascal ComponentResult MusicGetKnob(MusicComponent mc, long knobID)
  827. ;
  828.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  829.         Macro
  830.         _MusicGetKnob
  831.             move.l              #$00040012,-(sp)
  832.             moveq               #0,D0
  833.             dc.w                $A82A
  834.         EndM
  835.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  836.         IMPORT_CFM_FUNCTION MusicGetKnob
  837.     ENDIF
  838.  
  839. ;
  840. ; pascal ComponentResult MusicSetKnob(MusicComponent mc, long knobID, long knobValue)
  841. ;
  842.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  843.         Macro
  844.         _MusicSetKnob
  845.             move.l              #$00080013,-(sp)
  846.             moveq               #0,D0
  847.             dc.w                $A82A
  848.         EndM
  849.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  850.         IMPORT_CFM_FUNCTION MusicSetKnob
  851.     ENDIF
  852.  
  853. ;
  854. ; pascal ComponentResult MusicGetPartName(MusicComponent mc, long part, StringPtr name)
  855. ;
  856.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  857.         Macro
  858.         _MusicGetPartName
  859.             move.l              #$00080014,-(sp)
  860.             moveq               #0,D0
  861.             dc.w                $A82A
  862.         EndM
  863.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  864.         IMPORT_CFM_FUNCTION MusicGetPartName
  865.     ENDIF
  866.  
  867. ;
  868. ; pascal ComponentResult MusicSetPartName(MusicComponent mc, long part, StringPtr name)
  869. ;
  870.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  871.         Macro
  872.         _MusicSetPartName
  873.             move.l              #$00080015,-(sp)
  874.             moveq               #0,D0
  875.             dc.w                $A82A
  876.         EndM
  877.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  878.         IMPORT_CFM_FUNCTION MusicSetPartName
  879.     ENDIF
  880.  
  881. ;
  882. ; pascal ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *libraryIndexOut, unsigned long *fit)
  883. ;
  884.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  885.         Macro
  886.         _MusicFindTone
  887.             move.l              #$000C0016,-(sp)
  888.             moveq               #0,D0
  889.             dc.w                $A82A
  890.         EndM
  891.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  892.         IMPORT_CFM_FUNCTION MusicFindTone
  893.     ENDIF
  894.  
  895. ;
  896. ; pascal ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
  897. ;
  898.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  899.         Macro
  900.         _MusicPlayNote
  901.             move.l              #$000C0017,-(sp)
  902.             moveq               #0,D0
  903.             dc.w                $A82A
  904.         EndM
  905.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  906.         IMPORT_CFM_FUNCTION MusicPlayNote
  907.     ENDIF
  908.  
  909. ;
  910. ; pascal ComponentResult MusicResetPart(MusicComponent mc, long part)
  911. ;
  912.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  913.         Macro
  914.         _MusicResetPart
  915.             move.l              #$00040018,-(sp)
  916.             moveq               #0,D0
  917.             dc.w                $A82A
  918.         EndM
  919.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  920.         IMPORT_CFM_FUNCTION MusicResetPart
  921.     ENDIF
  922.  
  923. ;
  924. ; pascal ComponentResult MusicSetPartController(MusicComponent mc, long part, MusicController controllerNumber, long controllerValue)
  925. ;
  926.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  927.         Macro
  928.         _MusicSetPartController
  929.             move.l              #$000C0019,-(sp)
  930.             moveq               #0,D0
  931.             dc.w                $A82A
  932.         EndM
  933.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  934.         IMPORT_CFM_FUNCTION MusicSetPartController
  935.     ENDIF
  936.  
  937.  
  938. ;
  939. ; pascal ComponentResult MusicGetPartController(MusicComponent mc, long part, MusicController controllerNumber)
  940. ;
  941.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  942.         Macro
  943.         _MusicGetPartController
  944.             move.l              #$0008001A,-(sp)
  945.             moveq               #0,D0
  946.             dc.w                $A82A
  947.         EndM
  948.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  949.         IMPORT_CFM_FUNCTION MusicGetPartController
  950.     ENDIF
  951.  
  952. ;
  953. ; pascal ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
  954. ;
  955.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  956.         Macro
  957.         _MusicGetMIDIProc
  958.             move.l              #$0008001B,-(sp)
  959.             moveq               #0,D0
  960.             dc.w                $A82A
  961.         EndM
  962.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  963.         IMPORT_CFM_FUNCTION MusicGetMIDIProc
  964.     ENDIF
  965.  
  966. ;
  967. ; pascal ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
  968. ;
  969.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  970.         Macro
  971.         _MusicSetMIDIProc
  972.             move.l              #$0008001C,-(sp)
  973.             moveq               #0,D0
  974.             dc.w                $A82A
  975.         EndM
  976.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  977.         IMPORT_CFM_FUNCTION MusicSetMIDIProc
  978.     ENDIF
  979.  
  980. ;
  981. ; pascal ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
  982. ;
  983.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  984.         Macro
  985.         _MusicGetInstrumentNames
  986.             move.l              #$0010001D,-(sp)
  987.             moveq               #0,D0
  988.             dc.w                $A82A
  989.         EndM
  990.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  991.         IMPORT_CFM_FUNCTION MusicGetInstrumentNames
  992.     ENDIF
  993.  
  994. ;
  995. ; pascal ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
  996. ;
  997.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  998.         Macro
  999.         _MusicGetDrumNames
  1000.             move.l              #$000C001E,-(sp)
  1001.             moveq               #0,D0
  1002.             dc.w                $A82A
  1003.         EndM
  1004.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1005.         IMPORT_CFM_FUNCTION MusicGetDrumNames
  1006.     ENDIF
  1007.  
  1008. ;
  1009. ; pascal ComponentResult MusicGetMasterTune(MusicComponent mc)
  1010. ;
  1011.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1012.         Macro
  1013.         _MusicGetMasterTune
  1014.             move.l              #$0000001F,-(sp)
  1015.             moveq               #0,D0
  1016.             dc.w                $A82A
  1017.         EndM
  1018.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1019.         IMPORT_CFM_FUNCTION MusicGetMasterTune
  1020.     ENDIF
  1021.  
  1022. ;
  1023. ; pascal ComponentResult MusicSetMasterTune(MusicComponent mc, long masterTune)
  1024. ;
  1025.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1026.         Macro
  1027.         _MusicSetMasterTune
  1028.             move.l              #$00040020,-(sp)
  1029.             moveq               #0,D0
  1030.             dc.w                $A82A
  1031.         EndM
  1032.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1033.         IMPORT_CFM_FUNCTION MusicSetMasterTune
  1034.     ENDIF
  1035.  
  1036.  
  1037. ;
  1038. ; pascal ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
  1039. ;
  1040.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1041.         Macro
  1042.         _MusicGetInstrumentAboutInfo
  1043.             move.l              #$00080022,-(sp)
  1044.             moveq               #0,D0
  1045.             dc.w                $A82A
  1046.         EndM
  1047.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1048.         IMPORT_CFM_FUNCTION MusicGetInstrumentAboutInfo
  1049.     ENDIF
  1050.  
  1051. ;
  1052. ; pascal ComponentResult MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2)
  1053. ;
  1054.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1055.         Macro
  1056.         _MusicGetDeviceConnection
  1057.             move.l              #$000C0023,-(sp)
  1058.             moveq               #0,D0
  1059.             dc.w                $A82A
  1060.         EndM
  1061.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1062.         IMPORT_CFM_FUNCTION MusicGetDeviceConnection
  1063.     ENDIF
  1064.  
  1065. ;
  1066. ; pascal ComponentResult MusicUseDeviceConnection(MusicComponent mc, long id1, long id2)
  1067. ;
  1068.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1069.         Macro
  1070.         _MusicUseDeviceConnection
  1071.             move.l              #$00080024,-(sp)
  1072.             moveq               #0,D0
  1073.             dc.w                $A82A
  1074.         EndM
  1075.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1076.         IMPORT_CFM_FUNCTION MusicUseDeviceConnection
  1077.     ENDIF
  1078.  
  1079. ;
  1080. ; pascal ComponentResult MusicGetKnobSettingStrings(MusicComponent mc, long knobIndex, long isGlobal, Handle *settingsNames, Handle *settingsCategoryLasts, Handle *settingsCategoryNames)
  1081. ;
  1082.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1083.         Macro
  1084.         _MusicGetKnobSettingStrings
  1085.             move.l              #$00140025,-(sp)
  1086.             moveq               #0,D0
  1087.             dc.w                $A82A
  1088.         EndM
  1089.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1090.         IMPORT_CFM_FUNCTION MusicGetKnobSettingStrings
  1091.     ENDIF
  1092.  
  1093. ;
  1094. ; pascal ComponentResult MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount, long *outputPortCount)
  1095. ;
  1096.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1097.         Macro
  1098.         _MusicGetMIDIPorts
  1099.             move.l              #$00080026,-(sp)
  1100.             moveq               #0,D0
  1101.             dc.w                $A82A
  1102.         EndM
  1103.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1104.         IMPORT_CFM_FUNCTION MusicGetMIDIPorts
  1105.     ENDIF
  1106.  
  1107. ;
  1108. ; pascal ComponentResult MusicSendMIDI(MusicComponent mc, long portIndex, MusicMIDIPacket *mp)
  1109. ;
  1110.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1111.         Macro
  1112.         _MusicSendMIDI
  1113.             move.l              #$00080027,-(sp)
  1114.             moveq               #0,D0
  1115.             dc.w                $A82A
  1116.         EndM
  1117.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1118.         IMPORT_CFM_FUNCTION MusicSendMIDI
  1119.     ENDIF
  1120.  
  1121. ;
  1122. ; pascal ComponentResult MusicReceiveMIDI(MusicComponent mc, MusicMIDIReadHookUPP readHook, long refCon)
  1123. ;
  1124.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1125.         Macro
  1126.         _MusicReceiveMIDI
  1127.             move.l              #$00080028,-(sp)
  1128.             moveq               #0,D0
  1129.             dc.w                $A82A
  1130.         EndM
  1131.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1132.         IMPORT_CFM_FUNCTION MusicReceiveMIDI
  1133.     ENDIF
  1134.  
  1135. ;
  1136. ; pascal ComponentResult MusicStartOffline(MusicComponent mc, unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize, MusicOfflineDataUPP dataProc, long dataProcRefCon)
  1137. ;
  1138.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1139.         Macro
  1140.         _MusicStartOffline
  1141.             move.l              #$00140029,-(sp)
  1142.             moveq               #0,D0
  1143.             dc.w                $A82A
  1144.         EndM
  1145.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1146.         IMPORT_CFM_FUNCTION MusicStartOffline
  1147.     ENDIF
  1148.  
  1149. ;
  1150. ; pascal ComponentResult MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp)
  1151. ;
  1152.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1153.         Macro
  1154.         _MusicSetOfflineTimeTo
  1155.             move.l              #$0004002A,-(sp)
  1156.             moveq               #0,D0
  1157.             dc.w                $A82A
  1158.         EndM
  1159.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1160.         IMPORT_CFM_FUNCTION MusicSetOfflineTimeTo
  1161.     ENDIF
  1162.  
  1163. ;
  1164. ; pascal ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1165. ;
  1166.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1167.         Macro
  1168.         _MusicGetInstrumentKnobDescription
  1169.             move.l              #$0008002B,-(sp)
  1170.             moveq               #0,D0
  1171.             dc.w                $A82A
  1172.         EndM
  1173.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1174.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescription
  1175.     ENDIF
  1176.  
  1177. ;
  1178. ; pascal ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1179. ;
  1180.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1181.         Macro
  1182.         _MusicGetDrumKnobDescription
  1183.             move.l              #$0008002C,-(sp)
  1184.             moveq               #0,D0
  1185.             dc.w                $A82A
  1186.         EndM
  1187.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1188.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescription
  1189.     ENDIF
  1190.  
  1191. ;
  1192. ; pascal ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1193. ;
  1194.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1195.         Macro
  1196.         _MusicGetKnobDescription
  1197.             move.l              #$0008002D,-(sp)
  1198.             moveq               #0,D0
  1199.             dc.w                $A82A
  1200.         EndM
  1201.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1202.         IMPORT_CFM_FUNCTION MusicGetKnobDescription
  1203.     ENDIF
  1204.  
  1205. ;
  1206. ; pascal ComponentResult MusicGetInfoText(MusicComponent mc, long selector, Handle *textH, Handle *styleH)
  1207. ;
  1208.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1209.         Macro
  1210.         _MusicGetInfoText
  1211.             move.l              #$000C002E,-(sp)
  1212.             moveq               #0,D0
  1213.             dc.w                $A82A
  1214.         EndM
  1215.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1216.         IMPORT_CFM_FUNCTION MusicGetInfoText
  1217.     ENDIF
  1218.  
  1219.  
  1220. kGetInstrumentInfoNoBuiltIn        EQU        $01
  1221. kGetInstrumentInfoMidiUserInst    EQU        $02
  1222. kGetInstrumentInfoNoIText        EQU        $04
  1223. ;
  1224. ; pascal ComponentResult MusicGetInstrumentInfo(MusicComponent mc, long getInstrumentInfoFlags, InstrumentInfoListHandle *infoListH)
  1225. ;
  1226.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1227.         Macro
  1228.         _MusicGetInstrumentInfo
  1229.             move.l              #$0008002F,-(sp)
  1230.             moveq               #0,D0
  1231.             dc.w                $A82A
  1232.         EndM
  1233.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1234.         IMPORT_CFM_FUNCTION MusicGetInstrumentInfo
  1235.     ENDIF
  1236.  
  1237.  
  1238.  
  1239.  
  1240. ;
  1241. ; pascal ComponentResult MusicTask(MusicComponent mc)
  1242. ;
  1243.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1244.         Macro
  1245.         _MusicTask
  1246.             move.l              #$00000031,-(sp)
  1247.             moveq               #0,D0
  1248.             dc.w                $A82A
  1249.         EndM
  1250.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1251.         IMPORT_CFM_FUNCTION MusicTask
  1252.     ENDIF
  1253.  
  1254. ;
  1255. ; pascal ComponentResult MusicSetPartInstrumentNumberInterruptSafe(MusicComponent mc, long part, long instrumentNumber)
  1256. ;
  1257.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1258.         Macro
  1259.         _MusicSetPartInstrumentNumberInterruptSafe
  1260.             move.l              #$00080032,-(sp)
  1261.             moveq               #0,D0
  1262.             dc.w                $A82A
  1263.         EndM
  1264.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1265.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumberInterruptSafe
  1266.     ENDIF
  1267.  
  1268. ;
  1269. ; pascal ComponentResult MusicSetPartSoundLocalization(MusicComponent mc, long part, Handle data)
  1270. ;
  1271.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1272.         Macro
  1273.         _MusicSetPartSoundLocalization
  1274.             move.l              #$00080033,-(sp)
  1275.             moveq               #0,D0
  1276.             dc.w                $A82A
  1277.         EndM
  1278.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1279.         IMPORT_CFM_FUNCTION MusicSetPartSoundLocalization
  1280.     ENDIF
  1281.  
  1282. ;
  1283. ; pascal ComponentResult MusicGenericConfigure(MusicComponent mc, long mode, long flags, long baseResID)
  1284. ;
  1285.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1286.         Macro
  1287.         _MusicGenericConfigure
  1288.             move.l              #$000C0100,-(sp)
  1289.             moveq               #0,D0
  1290.             dc.w                $A82A
  1291.         EndM
  1292.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1293.         IMPORT_CFM_FUNCTION MusicGenericConfigure
  1294.     ENDIF
  1295.  
  1296. ;
  1297. ; pascal ComponentResult MusicGenericGetPart(MusicComponent mc, long partNumber, GCPart **part)
  1298. ;
  1299.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1300.         Macro
  1301.         _MusicGenericGetPart
  1302.             move.l              #$00080101,-(sp)
  1303.             moveq               #0,D0
  1304.             dc.w                $A82A
  1305.         EndM
  1306.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1307.         IMPORT_CFM_FUNCTION MusicGenericGetPart
  1308.     ENDIF
  1309.  
  1310. ;
  1311. ; pascal ComponentResult MusicGenericGetKnobList(MusicComponent mc, long knobType, GenericKnobDescriptionListHandle *gkdlH)
  1312. ;
  1313.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1314.         Macro
  1315.         _MusicGenericGetKnobList
  1316.             move.l              #$00080102,-(sp)
  1317.             moveq               #0,D0
  1318.             dc.w                $A82A
  1319.         EndM
  1320.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1321.         IMPORT_CFM_FUNCTION MusicGenericGetKnobList
  1322.     ENDIF
  1323.  
  1324. ;
  1325. ; pascal ComponentResult MusicGenericSetResourceNumbers(MusicComponent mc, Handle resourceIDH)
  1326. ;
  1327.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1328.         Macro
  1329.         _MusicGenericSetResourceNumbers
  1330.             move.l              #$00040103,-(sp)
  1331.             moveq               #0,D0
  1332.             dc.w                $A82A
  1333.         EndM
  1334.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1335.         IMPORT_CFM_FUNCTION MusicGenericSetResourceNumbers
  1336.     ENDIF
  1337.  
  1338. ;
  1339. ; pascal ComponentResult MusicDerivedMIDISend(MusicComponent mc, MusicMIDIPacket *packet)
  1340. ;
  1341.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1342.         Macro
  1343.         _MusicDerivedMIDISend
  1344.             move.l              #$00040200,-(sp)
  1345.             moveq               #0,D0
  1346.             dc.w                $A82A
  1347.         EndM
  1348.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1349.         IMPORT_CFM_FUNCTION MusicDerivedMIDISend
  1350.     ENDIF
  1351.  
  1352. ;
  1353. ; pascal ComponentResult MusicDerivedSetKnob(MusicComponent mc, long knobType, long knobNumber, long knobValue, long partNumber, GCPart *p, GenericKnobDescription *gkd)
  1354. ;
  1355.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1356.         Macro
  1357.         _MusicDerivedSetKnob
  1358.             move.l              #$00180201,-(sp)
  1359.             moveq               #0,D0
  1360.             dc.w                $A82A
  1361.         EndM
  1362.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1363.         IMPORT_CFM_FUNCTION MusicDerivedSetKnob
  1364.     ENDIF
  1365.  
  1366. ;
  1367. ; pascal ComponentResult MusicDerivedSetPart(MusicComponent mc, long partNumber, GCPart *p)
  1368. ;
  1369.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1370.         Macro
  1371.         _MusicDerivedSetPart
  1372.             move.l              #$00080202,-(sp)
  1373.             moveq               #0,D0
  1374.             dc.w                $A82A
  1375.         EndM
  1376.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1377.         IMPORT_CFM_FUNCTION MusicDerivedSetPart
  1378.     ENDIF
  1379.  
  1380. ;
  1381. ; pascal ComponentResult MusicDerivedSetInstrument(MusicComponent mc, long partNumber, GCPart *p)
  1382. ;
  1383.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1384.         Macro
  1385.         _MusicDerivedSetInstrument
  1386.             move.l              #$00080203,-(sp)
  1387.             moveq               #0,D0
  1388.             dc.w                $A82A
  1389.         EndM
  1390.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1391.         IMPORT_CFM_FUNCTION MusicDerivedSetInstrument
  1392.     ENDIF
  1393.  
  1394. ;
  1395. ; pascal ComponentResult MusicDerivedSetPartInstrumentNumber(MusicComponent mc, long partNumber, GCPart *p)
  1396. ;
  1397.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1398.         Macro
  1399.         _MusicDerivedSetPartInstrumentNumber
  1400.             move.l              #$00080204,-(sp)
  1401.             moveq               #0,D0
  1402.             dc.w                $A82A
  1403.         EndM
  1404.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1405.         IMPORT_CFM_FUNCTION MusicDerivedSetPartInstrumentNumber
  1406.     ENDIF
  1407.  
  1408. ;
  1409. ; pascal ComponentResult MusicDerivedSetMIDI(MusicComponent mc, MusicMIDISendUPP midiProc, long refcon, long midiChannel)
  1410. ;
  1411.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1412.         Macro
  1413.         _MusicDerivedSetMIDI
  1414.             move.l              #$000C0205,-(sp)
  1415.             moveq               #0,D0
  1416.             dc.w                $A82A
  1417.         EndM
  1418.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1419.         IMPORT_CFM_FUNCTION MusicDerivedSetMIDI
  1420.     ENDIF
  1421.  
  1422. ;
  1423. ; pascal ComponentResult MusicDerivedStorePartInstrument(MusicComponent mc, long partNumber, GCPart *p, long instrumentNumber)
  1424. ;
  1425.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1426.         Macro
  1427.         _MusicDerivedStorePartInstrument
  1428.             move.l              #$000C0206,-(sp)
  1429.             moveq               #0,D0
  1430.             dc.w                $A82A
  1431.         EndM
  1432.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1433.         IMPORT_CFM_FUNCTION MusicDerivedStorePartInstrument
  1434.     ENDIF
  1435.  
  1436. ;
  1437. ; pascal ComponentResult MusicDerivedOpenResFile(MusicComponent mc)
  1438. ;
  1439.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1440.         Macro
  1441.         _MusicDerivedOpenResFile
  1442.             move.l              #$00000207,-(sp)
  1443.             moveq               #0,D0
  1444.             dc.w                $A82A
  1445.         EndM
  1446.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1447.         IMPORT_CFM_FUNCTION MusicDerivedOpenResFile
  1448.     ENDIF
  1449.  
  1450. ;
  1451. ; pascal ComponentResult MusicDerivedCloseResFile(MusicComponent mc, short resRefNum)
  1452. ;
  1453.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1454.         Macro
  1455.         _MusicDerivedCloseResFile
  1456.             move.l              #$00020208,-(sp)
  1457.             moveq               #0,D0
  1458.             dc.w                $A82A
  1459.         EndM
  1460.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1461.         IMPORT_CFM_FUNCTION MusicDerivedCloseResFile
  1462.     ENDIF
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469. ;  Mask bit for returned value by InstrumentFind.
  1470.  
  1471. kInstrumentExactMatch            EQU        $00020000
  1472. kInstrumentRecommendedSubstitute EQU    $00010000
  1473. kInstrumentQualityField            EQU        $FF000000
  1474. kInstrumentRoland8BitQuality    EQU        $05000000
  1475. ; typedef struct InstrumentAboutInfo *    InstrumentAboutInfoPtr
  1476.  
  1477. ; typedef InstrumentAboutInfoPtr *        InstrumentAboutInfoHandle
  1478.  
  1479. GMInstrumentInfo        RECORD 0
  1480. cmpInstID                 ds.l    1                ; offset: $0 (0)
  1481. gmInstNum                 ds.l    1                ; offset: $4 (4)
  1482. instMatch                 ds.l    1                ; offset: $8 (8)
  1483. sizeof                     EQU *                    ; size:   $C (12)
  1484.                         ENDR
  1485. ; typedef struct GMInstrumentInfo *        GMInstrumentInfoPtr
  1486.  
  1487. ; typedef GMInstrumentInfoPtr *            GMInstrumentInfoHandle
  1488.  
  1489. nonGMInstrumentInfoRecord RECORD 0
  1490. cmpInstID                 ds.l    1                ; offset: $0 (0)        ;  if 0, category name
  1491. flags                     ds.l    1                ; offset: $4 (4)        ;  match, show in picker
  1492. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  1493. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  1494. sizeof                     EQU *                    ; size:   $10 (16)
  1495.                         ENDR
  1496. nonGMInstrumentInfo        RECORD 0
  1497. recordCount                 ds.l    1                ; offset: $0 (0)
  1498. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  1499. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itext/name atoms for instruments
  1500. instInfo                 ds        nonGMInstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  1501. sizeof                     EQU *                    ; size:   $1C (28)
  1502.                         ENDR
  1503. ; typedef struct nonGMInstrumentInfo *    nonGMInstrumentInfoPtr
  1504.  
  1505. ; typedef nonGMInstrumentInfoPtr *        nonGMInstrumentInfoHandle
  1506.  
  1507. InstCompInfo            RECORD 0
  1508. infoSize                 ds.l    1                ; offset: $0 (0)        ;  size of this record
  1509. InstrumentLibraryName     ds        Str31            ; offset: $4 (4)
  1510. InstrumentLibraryITxt     ds.l    1                ; offset: $24 (36)        ;  itext/name atoms for instruments
  1511. GMinstrumentCount         ds.l    1                ; offset: $28 (40)
  1512. GMinstrumentInfo         ds.l    1                ; offset: $2C (44)
  1513. GMdrumCount                 ds.l    1                ; offset: $30 (48)
  1514. GMdrumInfo                 ds.l    1                ; offset: $34 (52)
  1515. nonGMinstrumentCount     ds.l    1                ; offset: $38 (56)
  1516. nonGMinstrumentInfo         ds.l    1                ; offset: $3C (60)
  1517. sizeof                     EQU *                    ; size:   $40 (64)
  1518.                         ENDR
  1519. ; typedef struct InstCompInfo *            InstCompInfoPtr
  1520.  
  1521. ; typedef InstCompInfoPtr *                InstCompInfoHandle
  1522.  
  1523. ;
  1524. ; pascal ComponentResult InstrumentGetInst(ComponentInstance ci, long instID, AtomicInstrument *atomicInst, long flags)
  1525. ;
  1526.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1527.         Macro
  1528.         _InstrumentGetInst
  1529.             move.l              #$000C0001,-(sp)
  1530.             moveq               #0,D0
  1531.             dc.w                $A82A
  1532.         EndM
  1533.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1534.         IMPORT_CFM_FUNCTION InstrumentGetInst
  1535.     ENDIF
  1536.  
  1537. ;
  1538. ; pascal ComponentResult InstrumentGetInfo(ComponentInstance ci, long getInstrumentInfoFlags, InstCompInfoHandle *instInfo)
  1539. ;
  1540.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1541.         Macro
  1542.         _InstrumentGetInfo
  1543.             move.l              #$00080002,-(sp)
  1544.             moveq               #0,D0
  1545.             dc.w                $A82A
  1546.         EndM
  1547.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1548.         IMPORT_CFM_FUNCTION InstrumentGetInfo
  1549.     ENDIF
  1550.  
  1551. ;
  1552. ; pascal ComponentResult InstrumentInitialize(ComponentInstance ci, long initFormat, void *initParams)
  1553. ;
  1554.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1555.         Macro
  1556.         _InstrumentInitialize
  1557.             move.l              #$00080003,-(sp)
  1558.             moveq               #0,D0
  1559.             dc.w                $A82A
  1560.         EndM
  1561.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1562.         IMPORT_CFM_FUNCTION InstrumentInitialize
  1563.     ENDIF
  1564.  
  1565. ;
  1566. ; pascal ComponentResult InstrumentOpenComponentResFile(ComponentInstance ci, short *resFile)
  1567. ;
  1568.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1569.         Macro
  1570.         _InstrumentOpenComponentResFile
  1571.             move.l              #$00040004,-(sp)
  1572.             moveq               #0,D0
  1573.             dc.w                $A82A
  1574.         EndM
  1575.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1576.         IMPORT_CFM_FUNCTION InstrumentOpenComponentResFile
  1577.     ENDIF
  1578.  
  1579. ;
  1580. ; pascal ComponentResult InstrumentCloseComponentResFile(ComponentInstance ci, short resFile)
  1581. ;
  1582.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1583.         Macro
  1584.         _InstrumentCloseComponentResFile
  1585.             move.l              #$00020005,-(sp)
  1586.             moveq               #0,D0
  1587.             dc.w                $A82A
  1588.         EndM
  1589.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1590.         IMPORT_CFM_FUNCTION InstrumentCloseComponentResFile
  1591.     ENDIF
  1592.  
  1593. ;
  1594. ; pascal ComponentResult InstrumentGetComponentRefCon(ComponentInstance ci, void **refCon)
  1595. ;
  1596.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1597.         Macro
  1598.         _InstrumentGetComponentRefCon
  1599.             move.l              #$00040006,-(sp)
  1600.             moveq               #0,D0
  1601.             dc.w                $A82A
  1602.         EndM
  1603.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1604.         IMPORT_CFM_FUNCTION InstrumentGetComponentRefCon
  1605.     ENDIF
  1606.  
  1607. ;
  1608. ; pascal ComponentResult InstrumentSetComponentRefCon(ComponentInstance ci, void *refCon)
  1609. ;
  1610.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1611.         Macro
  1612.         _InstrumentSetComponentRefCon
  1613.             move.l              #$00040007,-(sp)
  1614.             moveq               #0,D0
  1615.             dc.w                $A82A
  1616.         EndM
  1617.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1618.         IMPORT_CFM_FUNCTION InstrumentSetComponentRefCon
  1619.     ENDIF
  1620.  
  1621. ;
  1622. ; pascal ComponentResult InstrumentGetSynthesizerType(ComponentInstance ci, OSType *synthesizerType)
  1623. ;
  1624.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1625.         Macro
  1626.         _InstrumentGetSynthesizerType
  1627.             move.l              #$00040008,-(sp)
  1628.             moveq               #0,D0
  1629.             dc.w                $A82A
  1630.         EndM
  1631.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1632.         IMPORT_CFM_FUNCTION InstrumentGetSynthesizerType
  1633.     ENDIF
  1634.  
  1635.  
  1636.  
  1637. ; --------------------------
  1638. ;    Types
  1639. ;--------------------------
  1640.  
  1641.  
  1642. kNoteRequestNoGM                EQU        1                    ; dont degrade to a GM synth 
  1643. kNoteRequestNoSynthType            EQU        2                    ; dont degrade to another synth of same type but different name 
  1644. kNoteRequestSynthMustMatch        EQU        4                    ; synthType must be a match, including kGMSynthComponentSubType 
  1645. ; typedef ComponentInstance             NoteAllocator
  1646.  
  1647. NoteRequestInfo            RECORD 0
  1648. flags                     ds.b    1                ; offset: $0 (0)        ;  1: dont accept GM match, 2: dont accept same-synth-type match 
  1649. reserved                 ds.b    1                ; offset: $1 (1)        ;  must be zero 
  1650. polyphony                 ds        BigEndianShort ; offset: $2 (2)            ;  Maximum number of voices 
  1651. typicalPolyphony         ds        BigEndianFixed ; offset: $4 (4)            ;  Hint for level mixing 
  1652. sizeof                     EQU *                    ; size:   $8 (8)
  1653.                         ENDR
  1654. NoteRequest                RECORD 0
  1655. info                     ds        NoteRequestInfo ; offset: $0 (0)
  1656. tone                     ds        ToneDescription ; offset: $8 (8)
  1657. sizeof                     EQU *                    ; size:   $54 (84)
  1658.                         ENDR
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  
  1664. kPickDontMix                    EQU        1                    ; dont mix instruments with drum sounds 
  1665. kPickSameSynth                    EQU        2                    ; only allow the same device that went in, to come out 
  1666. kPickUserInsts                    EQU        4                    ; show user insts in addition to ROM voices 
  1667. kPickEditAllowEdit                EQU        8                    ; lets user switch over to edit mode 
  1668. kPickEditAllowPick                EQU        16                    ; lets the user switch over to pick mode 
  1669. kPickEditSynthGlobal            EQU        32                    ; edit the global knobs of the synth 
  1670. kPickEditControllers            EQU        64                    ; edit the controllers of the notechannel 
  1671.  
  1672.  
  1673. kNoteAllocatorComponentType        EQU        'nota'
  1674.  
  1675. ; --------------------------------
  1676. ;    Note Allocator Prototypes
  1677. ;--------------------------------
  1678.  
  1679. ;
  1680. ; pascal ComponentResult NARegisterMusicDevice(NoteAllocator na, OSType synthType, Str31 name, SynthesizerConnections *connections)
  1681. ;
  1682.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1683.         Macro
  1684.         _NARegisterMusicDevice
  1685.             move.l              #$000C0000,-(sp)
  1686.             moveq               #0,D0
  1687.             dc.w                $A82A
  1688.         EndM
  1689.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1690.         IMPORT_CFM_FUNCTION NARegisterMusicDevice
  1691.     ENDIF
  1692.  
  1693. ;
  1694. ; pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator na, long index)
  1695. ;
  1696.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1697.         Macro
  1698.         _NAUnregisterMusicDevice
  1699.             move.l              #$00040001,-(sp)
  1700.             moveq               #0,D0
  1701.             dc.w                $A82A
  1702.         EndM
  1703.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1704.         IMPORT_CFM_FUNCTION NAUnregisterMusicDevice
  1705.     ENDIF
  1706.  
  1707. ;
  1708. ; pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator na, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
  1709. ;
  1710.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1711.         Macro
  1712.         _NAGetRegisteredMusicDevice
  1713.             move.l              #$00140002,-(sp)
  1714.             moveq               #0,D0
  1715.             dc.w                $A82A
  1716.         EndM
  1717.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1718.         IMPORT_CFM_FUNCTION NAGetRegisteredMusicDevice
  1719.     ENDIF
  1720.  
  1721. ;
  1722. ; pascal ComponentResult NASaveMusicConfiguration(NoteAllocator na)
  1723. ;
  1724.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1725.         Macro
  1726.         _NASaveMusicConfiguration
  1727.             move.l              #$00000003,-(sp)
  1728.             moveq               #0,D0
  1729.             dc.w                $A82A
  1730.         EndM
  1731.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1732.         IMPORT_CFM_FUNCTION NASaveMusicConfiguration
  1733.     ENDIF
  1734.  
  1735. ;
  1736. ; pascal ComponentResult NANewNoteChannel(NoteAllocator na, NoteRequest *noteRequest, NoteChannel *outChannel)
  1737. ;
  1738.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1739.         Macro
  1740.         _NANewNoteChannel
  1741.             move.l              #$00080004,-(sp)
  1742.             moveq               #0,D0
  1743.             dc.w                $A82A
  1744.         EndM
  1745.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1746.         IMPORT_CFM_FUNCTION NANewNoteChannel
  1747.     ENDIF
  1748.  
  1749. ;
  1750. ; pascal ComponentResult NADisposeNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1751. ;
  1752.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1753.         Macro
  1754.         _NADisposeNoteChannel
  1755.             move.l              #$00040005,-(sp)
  1756.             moveq               #0,D0
  1757.             dc.w                $A82A
  1758.         EndM
  1759.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1760.         IMPORT_CFM_FUNCTION NADisposeNoteChannel
  1761.     ENDIF
  1762.  
  1763. ;
  1764. ; pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator na, NoteChannel noteChannel, long *index, long *part)
  1765. ;
  1766.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1767.         Macro
  1768.         _NAGetNoteChannelInfo
  1769.             move.l              #$000C0006,-(sp)
  1770.             moveq               #0,D0
  1771.             dc.w                $A82A
  1772.         EndM
  1773.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1774.         IMPORT_CFM_FUNCTION NAGetNoteChannelInfo
  1775.     ENDIF
  1776.  
  1777. ;
  1778. ; pascal ComponentResult NAPrerollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1779. ;
  1780.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1781.         Macro
  1782.         _NAPrerollNoteChannel
  1783.             move.l              #$00040007,-(sp)
  1784.             moveq               #0,D0
  1785.             dc.w                $A82A
  1786.         EndM
  1787.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1788.         IMPORT_CFM_FUNCTION NAPrerollNoteChannel
  1789.     ENDIF
  1790.  
  1791. ;
  1792. ; pascal ComponentResult NAUnrollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1793. ;
  1794.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1795.         Macro
  1796.         _NAUnrollNoteChannel
  1797.             move.l              #$00040008,-(sp)
  1798.             moveq               #0,D0
  1799.             dc.w                $A82A
  1800.         EndM
  1801.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1802.         IMPORT_CFM_FUNCTION NAUnrollNoteChannel
  1803.     ENDIF
  1804.  
  1805.  
  1806. ;
  1807. ; pascal ComponentResult NASetNoteChannelVolume(NoteAllocator na, NoteChannel noteChannel, Fixed volume)
  1808. ;
  1809.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1810.         Macro
  1811.         _NASetNoteChannelVolume
  1812.             move.l              #$0008000B,-(sp)
  1813.             moveq               #0,D0
  1814.             dc.w                $A82A
  1815.         EndM
  1816.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1817.         IMPORT_CFM_FUNCTION NASetNoteChannelVolume
  1818.     ENDIF
  1819.  
  1820. ;
  1821. ; pascal ComponentResult NAResetNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1822. ;
  1823.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1824.         Macro
  1825.         _NAResetNoteChannel
  1826.             move.l              #$0004000C,-(sp)
  1827.             moveq               #0,D0
  1828.             dc.w                $A82A
  1829.         EndM
  1830.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1831.         IMPORT_CFM_FUNCTION NAResetNoteChannel
  1832.     ENDIF
  1833.  
  1834. ;
  1835. ; pascal ComponentResult NAPlayNote(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity)
  1836. ;
  1837.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1838.         Macro
  1839.         _NAPlayNote
  1840.             move.l              #$000C000D,-(sp)
  1841.             moveq               #0,D0
  1842.             dc.w                $A82A
  1843.         EndM
  1844.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1845.         IMPORT_CFM_FUNCTION NAPlayNote
  1846.     ENDIF
  1847.  
  1848. ;
  1849. ; pascal ComponentResult NASetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long controllerValue)
  1850. ;
  1851.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1852.         Macro
  1853.         _NASetController
  1854.             move.l              #$000C000E,-(sp)
  1855.             moveq               #0,D0
  1856.             dc.w                $A82A
  1857.         EndM
  1858.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1859.         IMPORT_CFM_FUNCTION NASetController
  1860.     ENDIF
  1861.  
  1862. ;
  1863. ; pascal ComponentResult NASetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long knobValue)
  1864. ;
  1865.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1866.         Macro
  1867.         _NASetKnob
  1868.             move.l              #$000C000F,-(sp)
  1869.             moveq               #0,D0
  1870.             dc.w                $A82A
  1871.         EndM
  1872.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1873.         IMPORT_CFM_FUNCTION NASetKnob
  1874.     ENDIF
  1875.  
  1876. ;
  1877. ; pascal ComponentResult NAFindNoteChannelTone(NoteAllocator na, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
  1878. ;
  1879.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1880.         Macro
  1881.         _NAFindNoteChannelTone
  1882.             move.l              #$000C0010,-(sp)
  1883.             moveq               #0,D0
  1884.             dc.w                $A82A
  1885.         EndM
  1886.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1887.         IMPORT_CFM_FUNCTION NAFindNoteChannelTone
  1888.     ENDIF
  1889.  
  1890. ;
  1891. ; pascal ComponentResult NASetInstrumentNumber(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  1892. ;
  1893.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1894.         Macro
  1895.         _NASetInstrumentNumber
  1896.             move.l              #$00080011,-(sp)
  1897.             moveq               #0,D0
  1898.             dc.w                $A82A
  1899.         EndM
  1900.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1901.         IMPORT_CFM_FUNCTION NASetInstrumentNumber
  1902.     ENDIF
  1903.  
  1904.  
  1905.  
  1906. ;
  1907. ; pascal ComponentResult NAPickInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, long reserved1, long reserved2)
  1908. ;
  1909.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1910.         Macro
  1911.         _NAPickInstrument
  1912.             move.l              #$001C0012,-(sp)
  1913.             moveq               #0,D0
  1914.             dc.w                $A82A
  1915.         EndM
  1916.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1917.         IMPORT_CFM_FUNCTION NAPickInstrument
  1918.     ENDIF
  1919.  
  1920. ;
  1921. ; pascal ComponentResult NAPickArrangement(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long zero1, long zero2, Track t, StringPtr songName)
  1922. ;
  1923.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1924.         Macro
  1925.         _NAPickArrangement
  1926.             move.l              #$00180013,-(sp)
  1927.             moveq               #0,D0
  1928.             dc.w                $A82A
  1929.         EndM
  1930.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1931.         IMPORT_CFM_FUNCTION NAPickArrangement
  1932.     ENDIF
  1933.  
  1934.  
  1935. ;
  1936. ; pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  1937. ;
  1938.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1939.         Macro
  1940.         _NASetDefaultMIDIInput
  1941.             move.l              #$00040015,-(sp)
  1942.             moveq               #0,D0
  1943.             dc.w                $A82A
  1944.         EndM
  1945.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1946.         IMPORT_CFM_FUNCTION NASetDefaultMIDIInput
  1947.     ENDIF
  1948.  
  1949. ;
  1950. ; pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  1951. ;
  1952.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1953.         Macro
  1954.         _NAGetDefaultMIDIInput
  1955.             move.l              #$00040016,-(sp)
  1956.             moveq               #0,D0
  1957.             dc.w                $A82A
  1958.         EndM
  1959.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1960.         IMPORT_CFM_FUNCTION NAGetDefaultMIDIInput
  1961.     ENDIF
  1962.  
  1963.  
  1964. ;
  1965. ; pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator na, MusicMIDIReadHookUPP readHook, long refCon, unsigned long flags)
  1966. ;
  1967.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1968.         Macro
  1969.         _NAUseDefaultMIDIInput
  1970.             move.l              #$000C0019,-(sp)
  1971.             moveq               #0,D0
  1972.             dc.w                $A82A
  1973.         EndM
  1974.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1975.         IMPORT_CFM_FUNCTION NAUseDefaultMIDIInput
  1976.     ENDIF
  1977.  
  1978. ;
  1979. ; pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator na)
  1980. ;
  1981.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1982.         Macro
  1983.         _NALoseDefaultMIDIInput
  1984.             move.l              #$0000001A,-(sp)
  1985.             moveq               #0,D0
  1986.             dc.w                $A82A
  1987.         EndM
  1988.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1989.         IMPORT_CFM_FUNCTION NALoseDefaultMIDIInput
  1990.     ENDIF
  1991.  
  1992. ;
  1993. ; pascal ComponentResult NAStuffToneDescription(NoteAllocator na, long gmNumber, ToneDescription *td)
  1994. ;
  1995.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1996.         Macro
  1997.         _NAStuffToneDescription
  1998.             move.l              #$0008001B,-(sp)
  1999.             moveq               #0,D0
  2000.             dc.w                $A82A
  2001.         EndM
  2002.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2003.         IMPORT_CFM_FUNCTION NAStuffToneDescription
  2004.     ENDIF
  2005.  
  2006. ;
  2007. ; pascal ComponentResult NACopyrightDialog(NoteAllocator na, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
  2008. ;
  2009.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2010.         Macro
  2011.         _NACopyrightDialog
  2012.             move.l              #$001C001C,-(sp)
  2013.             moveq               #0,D0
  2014.             dc.w                $A82A
  2015.         EndM
  2016.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2017.         IMPORT_CFM_FUNCTION NACopyrightDialog
  2018.     ENDIF
  2019.  
  2020.  
  2021.  
  2022. ;      kNADummyOneSelect = 29
  2023. ;      kNADummyTwoSelect = 30
  2024.  
  2025.  
  2026.  
  2027. ;
  2028. ; pascal ComponentResult NAGetIndNoteChannel(NoteAllocator na, long index, NoteChannel *nc, long *seed)
  2029. ;
  2030.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2031.         Macro
  2032.         _NAGetIndNoteChannel
  2033.             move.l              #$000C001F,-(sp)
  2034.             moveq               #0,D0
  2035.             dc.w                $A82A
  2036.         EndM
  2037.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2038.         IMPORT_CFM_FUNCTION NAGetIndNoteChannel
  2039.     ENDIF
  2040.  
  2041.  
  2042. ;
  2043. ; pascal ComponentResult NAGetMIDIPorts(NoteAllocator na, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
  2044. ;
  2045.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2046.         Macro
  2047.         _NAGetMIDIPorts
  2048.             move.l              #$00080021,-(sp)
  2049.             moveq               #0,D0
  2050.             dc.w                $A82A
  2051.         EndM
  2052.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2053.         IMPORT_CFM_FUNCTION NAGetMIDIPorts
  2054.     ENDIF
  2055.  
  2056. ;
  2057. ; pascal ComponentResult NAGetNoteRequest(NoteAllocator na, NoteChannel noteChannel, NoteRequest *nrOut)
  2058. ;
  2059.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2060.         Macro
  2061.         _NAGetNoteRequest
  2062.             move.l              #$00080022,-(sp)
  2063.             moveq               #0,D0
  2064.             dc.w                $A82A
  2065.         EndM
  2066.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2067.         IMPORT_CFM_FUNCTION NAGetNoteRequest
  2068.     ENDIF
  2069.  
  2070. ;
  2071. ; pascal ComponentResult NASendMIDI(NoteAllocator na, NoteChannel noteChannel, MusicMIDIPacket *mp)
  2072. ;
  2073.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2074.         Macro
  2075.         _NASendMIDI
  2076.             move.l              #$00080023,-(sp)
  2077.             moveq               #0,D0
  2078.             dc.w                $A82A
  2079.         EndM
  2080.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2081.         IMPORT_CFM_FUNCTION NASendMIDI
  2082.     ENDIF
  2083.  
  2084. ;
  2085. ; pascal ComponentResult NAPickEditInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long refCon, NoteChannel nc, AtomicInstrument ai, long flags)
  2086. ;
  2087.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2088.         Macro
  2089.         _NAPickEditInstrument
  2090.             move.l              #$00180024,-(sp)
  2091.             moveq               #0,D0
  2092.             dc.w                $A82A
  2093.         EndM
  2094.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2095.         IMPORT_CFM_FUNCTION NAPickEditInstrument
  2096.     ENDIF
  2097.  
  2098. ;
  2099. ; pascal ComponentResult NANewNoteChannelFromAtomicInstrument(NoteAllocator na, AtomicInstrumentPtr instrument, long flags, NoteChannel *outChannel)
  2100. ;
  2101.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2102.         Macro
  2103.         _NANewNoteChannelFromAtomicInstrument
  2104.             move.l              #$000C0025,-(sp)
  2105.             moveq               #0,D0
  2106.             dc.w                $A82A
  2107.         EndM
  2108.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2109.         IMPORT_CFM_FUNCTION NANewNoteChannelFromAtomicInstrument
  2110.     ENDIF
  2111.  
  2112. ;
  2113. ; pascal ComponentResult NASetAtomicInstrument(NoteAllocator na, NoteChannel noteChannel, AtomicInstrumentPtr instrument, long flags)
  2114. ;
  2115.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2116.         Macro
  2117.         _NASetAtomicInstrument
  2118.             move.l              #$000C0026,-(sp)
  2119.             moveq               #0,D0
  2120.             dc.w                $A82A
  2121.         EndM
  2122.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2123.         IMPORT_CFM_FUNCTION NASetAtomicInstrument
  2124.     ENDIF
  2125.  
  2126.  
  2127.  
  2128. ;
  2129. ; pascal ComponentResult NAGetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long *knobValue)
  2130. ;
  2131.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2132.         Macro
  2133.         _NAGetKnob
  2134.             move.l              #$000C0028,-(sp)
  2135.             moveq               #0,D0
  2136.             dc.w                $A82A
  2137.         EndM
  2138.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2139.         IMPORT_CFM_FUNCTION NAGetKnob
  2140.     ENDIF
  2141.  
  2142. ;
  2143. ; pascal ComponentResult NATask(NoteAllocator na)
  2144. ;
  2145.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2146.         Macro
  2147.         _NATask
  2148.             move.l              #$00000029,-(sp)
  2149.             moveq               #0,D0
  2150.             dc.w                $A82A
  2151.         EndM
  2152.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2153.         IMPORT_CFM_FUNCTION NATask
  2154.     ENDIF
  2155.  
  2156. ;
  2157. ; pascal ComponentResult NASetNoteChannelBalance(NoteAllocator na, NoteChannel noteChannel, long balance)
  2158. ;
  2159.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2160.         Macro
  2161.         _NASetNoteChannelBalance
  2162.             move.l              #$0008002A,-(sp)
  2163.             moveq               #0,D0
  2164.             dc.w                $A82A
  2165.         EndM
  2166.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2167.         IMPORT_CFM_FUNCTION NASetNoteChannelBalance
  2168.     ENDIF
  2169.  
  2170. ;
  2171. ; pascal ComponentResult NASetInstrumentNumberInterruptSafe(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  2172. ;
  2173.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2174.         Macro
  2175.         _NASetInstrumentNumberInterruptSafe
  2176.             move.l              #$0008002B,-(sp)
  2177.             moveq               #0,D0
  2178.             dc.w                $A82A
  2179.         EndM
  2180.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2181.         IMPORT_CFM_FUNCTION NASetInstrumentNumberInterruptSafe
  2182.     ENDIF
  2183.  
  2184. ;
  2185. ; pascal ComponentResult NASetNoteChannelSoundLocalization(NoteAllocator na, NoteChannel noteChannel, Handle data)
  2186. ;
  2187.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2188.         Macro
  2189.         _NASetNoteChannelSoundLocalization
  2190.             move.l              #$0008002C,-(sp)
  2191.             moveq               #0,D0
  2192.             dc.w                $A82A
  2193.         EndM
  2194.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2195.         IMPORT_CFM_FUNCTION NASetNoteChannelSoundLocalization
  2196.     ENDIF
  2197.  
  2198. ;
  2199. ; pascal ComponentResult NAGetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long *controllerValue)
  2200. ;
  2201.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2202.         Macro
  2203.         _NAGetController
  2204.             move.l              #$000C002D,-(sp)
  2205.             moveq               #0,D0
  2206.             dc.w                $A82A
  2207.         EndM
  2208.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2209.         IMPORT_CFM_FUNCTION NAGetController
  2210.     ENDIF
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217. kTuneQueueDepth                    EQU        8                    ; Deepest you can queue tune segments 
  2218.  
  2219. TuneStatus                RECORD 0
  2220. tune                     ds.l    1                ; offset: $0 (0)        ;  currently playing tune 
  2221. tunePtr                     ds.l    1                ; offset: $4 (4)        ;  position within currently playing piece 
  2222. time                     ds.l    1                ; offset: $8 (8)        ;  current tune time 
  2223. queueCount                 ds.w    1                ; offset: $C (12)        ;  how many pieces queued up? 
  2224. queueSpots                 ds.w    1                ; offset: $E (14)        ;  How many more tunepieces can be queued 
  2225. queueTime                 ds.l    1                ; offset: $10 (16)        ;  How much time is queued up? (can be very inaccurate) 
  2226. reserved                 ds.l    3                ; offset: $14 (20)
  2227. sizeof                     EQU *                    ; size:   $20 (32)
  2228.                         ENDR
  2229. ; typedef ComponentInstance             TunePlayer
  2230.  
  2231.  
  2232. kTunePlayerComponentType        EQU        'tune'
  2233.  
  2234. ;
  2235. ; pascal ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
  2236. ;
  2237.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2238.         Macro
  2239.         _TuneSetHeader
  2240.             move.l              #$00040004,-(sp)
  2241.             moveq               #0,D0
  2242.             dc.w                $A82A
  2243.         EndM
  2244.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2245.         IMPORT_CFM_FUNCTION TuneSetHeader
  2246.     ENDIF
  2247.  
  2248. ;
  2249. ; pascal ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
  2250. ;
  2251.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2252.         Macro
  2253.         _TuneGetTimeBase
  2254.             move.l              #$00040005,-(sp)
  2255.             moveq               #0,D0
  2256.             dc.w                $A82A
  2257.         EndM
  2258.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2259.         IMPORT_CFM_FUNCTION TuneGetTimeBase
  2260.     ENDIF
  2261.  
  2262. ;
  2263. ; pascal ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
  2264. ;
  2265.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2266.         Macro
  2267.         _TuneSetTimeScale
  2268.             move.l              #$00040006,-(sp)
  2269.             moveq               #0,D0
  2270.             dc.w                $A82A
  2271.         EndM
  2272.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2273.         IMPORT_CFM_FUNCTION TuneSetTimeScale
  2274.     ENDIF
  2275.  
  2276. ;
  2277. ; pascal ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
  2278. ;
  2279.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2280.         Macro
  2281.         _TuneGetTimeScale
  2282.             move.l              #$00040007,-(sp)
  2283.             moveq               #0,D0
  2284.             dc.w                $A82A
  2285.         EndM
  2286.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2287.         IMPORT_CFM_FUNCTION TuneGetTimeScale
  2288.     ENDIF
  2289.  
  2290. ;
  2291. ; pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
  2292. ;
  2293.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2294.         Macro
  2295.         _TuneGetIndexedNoteChannel
  2296.             move.l              #$00080008,-(sp)
  2297.             moveq               #0,D0
  2298.             dc.w                $A82A
  2299.         EndM
  2300.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2301.         IMPORT_CFM_FUNCTION TuneGetIndexedNoteChannel
  2302.     ENDIF
  2303.  
  2304.  
  2305. ;  Values for when to start. 
  2306.  
  2307. kTuneStartNow                    EQU        1                    ; start after buffer is implied 
  2308. kTuneDontClipNotes                EQU        2                    ; allow notes to finish their durations outside sample 
  2309. kTuneExcludeEdgeNotes            EQU        4                    ; dont play notes that start at end of tune 
  2310. kTuneQuickStart                    EQU        8                    ; Leave all the controllers where they are, ignore start time 
  2311. kTuneLoopUntil                    EQU        16                    ; loop a queued tune if there's nothing else in the queue
  2312. kTunePlayDifference                EQU        32                    ; by default, the tune difference is skipped
  2313. kTunePlayConcurrent                EQU        64                    ; dont block the next tune sequence with this one
  2314. kTuneStartNewMaster                EQU        16384
  2315. ;
  2316. ; pascal ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
  2317. ;
  2318.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2319.         Macro
  2320.         _TuneQueue
  2321.             move.l              #$001C000A,-(sp)
  2322.             moveq               #0,D0
  2323.             dc.w                $A82A
  2324.         EndM
  2325.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2326.         IMPORT_CFM_FUNCTION TuneQueue
  2327.     ENDIF
  2328.  
  2329. ;
  2330. ; pascal ComponentResult TuneInstant(TunePlayer tp, unsigned long *tune, unsigned long tunePosition)
  2331. ;
  2332.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2333.         Macro
  2334.         _TuneInstant
  2335.             move.l              #$0008000B,-(sp)
  2336.             moveq               #0,D0
  2337.             dc.w                $A82A
  2338.         EndM
  2339.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2340.         IMPORT_CFM_FUNCTION TuneInstant
  2341.     ENDIF
  2342.  
  2343. ;
  2344. ; pascal ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
  2345. ;
  2346.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2347.         Macro
  2348.         _TuneGetStatus
  2349.             move.l              #$0004000C,-(sp)
  2350.             moveq               #0,D0
  2351.             dc.w                $A82A
  2352.         EndM
  2353.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2354.         IMPORT_CFM_FUNCTION TuneGetStatus
  2355.     ENDIF
  2356.  
  2357. ;  Values for stopping. 
  2358.  
  2359. kTuneStopFade                    EQU        1                    ; do a quick, synchronous fadeout 
  2360. kTuneStopSustain                EQU        2                    ; don't silece notes 
  2361. kTuneStopInstant                EQU        4                    ; silence notes fast (else, decay them) 
  2362. kTuneStopReleaseChannels        EQU        8                    ; afterwards, let the channels go 
  2363. ;
  2364. ; pascal ComponentResult TuneStop(TunePlayer tp, long stopFlags)
  2365. ;
  2366.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2367.         Macro
  2368.         _TuneStop
  2369.             move.l              #$0004000D,-(sp)
  2370.             moveq               #0,D0
  2371.             dc.w                $A82A
  2372.         EndM
  2373.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2374.         IMPORT_CFM_FUNCTION TuneStop
  2375.     ENDIF
  2376.  
  2377.  
  2378. ;
  2379. ; pascal ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
  2380. ;
  2381.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2382.         Macro
  2383.         _TuneSetVolume
  2384.             move.l              #$00040010,-(sp)
  2385.             moveq               #0,D0
  2386.             dc.w                $A82A
  2387.         EndM
  2388.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2389.         IMPORT_CFM_FUNCTION TuneSetVolume
  2390.     ENDIF
  2391.  
  2392. ;
  2393. ; pascal ComponentResult TuneGetVolume(TunePlayer tp)
  2394. ;
  2395.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2396.         Macro
  2397.         _TuneGetVolume
  2398.             move.l              #$00000011,-(sp)
  2399.             moveq               #0,D0
  2400.             dc.w                $A82A
  2401.         EndM
  2402.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2403.         IMPORT_CFM_FUNCTION TuneGetVolume
  2404.     ENDIF
  2405.  
  2406. ;
  2407. ; pascal ComponentResult TunePreroll(TunePlayer tp)
  2408. ;
  2409.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2410.         Macro
  2411.         _TunePreroll
  2412.             move.l              #$00000012,-(sp)
  2413.             moveq               #0,D0
  2414.             dc.w                $A82A
  2415.         EndM
  2416.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2417.         IMPORT_CFM_FUNCTION TunePreroll
  2418.     ENDIF
  2419.  
  2420. ;
  2421. ; pascal ComponentResult TuneUnroll(TunePlayer tp)
  2422. ;
  2423.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2424.         Macro
  2425.         _TuneUnroll
  2426.             move.l              #$00000013,-(sp)
  2427.             moveq               #0,D0
  2428.             dc.w                $A82A
  2429.         EndM
  2430.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2431.         IMPORT_CFM_FUNCTION TuneUnroll
  2432.     ENDIF
  2433.  
  2434. ;
  2435. ; pascal ComponentResult TuneSetNoteChannels(TunePlayer tp, unsigned long count, NoteChannel *noteChannelList, TunePlayCallBackUPP playCallBackProc, long refCon)
  2436. ;
  2437.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2438.         Macro
  2439.         _TuneSetNoteChannels
  2440.             move.l              #$00100014,-(sp)
  2441.             moveq               #0,D0
  2442.             dc.w                $A82A
  2443.         EndM
  2444.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2445.         IMPORT_CFM_FUNCTION TuneSetNoteChannels
  2446.     ENDIF
  2447.  
  2448. ;
  2449. ; pascal ComponentResult TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose, long velocityShift)
  2450. ;
  2451.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2452.         Macro
  2453.         _TuneSetPartTranspose
  2454.             move.l              #$000C0015,-(sp)
  2455.             moveq               #0,D0
  2456.             dc.w                $A82A
  2457.         EndM
  2458.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2459.         IMPORT_CFM_FUNCTION TuneSetPartTranspose
  2460.     ENDIF
  2461.  
  2462.  
  2463. ;
  2464. ; pascal NoteAllocator TuneGetNoteAllocator(TunePlayer tp)
  2465. ;
  2466.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2467.         Macro
  2468.         _TuneGetNoteAllocator
  2469.             move.l              #$00000017,-(sp)
  2470.             moveq               #0,D0
  2471.             dc.w                $A82A
  2472.         EndM
  2473.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2474.         IMPORT_CFM_FUNCTION TuneGetNoteAllocator
  2475.     ENDIF
  2476.  
  2477. ;
  2478. ; pascal ComponentResult TuneSetSofter(TunePlayer tp, long softer)
  2479. ;
  2480.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2481.         Macro
  2482.         _TuneSetSofter
  2483.             move.l              #$00040018,-(sp)
  2484.             moveq               #0,D0
  2485.             dc.w                $A82A
  2486.         EndM
  2487.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2488.         IMPORT_CFM_FUNCTION TuneSetSofter
  2489.     ENDIF
  2490.  
  2491. ;
  2492. ; pascal ComponentResult TuneTask(TunePlayer tp)
  2493. ;
  2494.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2495.         Macro
  2496.         _TuneTask
  2497.             move.l              #$00000019,-(sp)
  2498.             moveq               #0,D0
  2499.             dc.w                $A82A
  2500.         EndM
  2501.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2502.         IMPORT_CFM_FUNCTION TuneTask
  2503.     ENDIF
  2504.  
  2505. ;
  2506. ; pascal ComponentResult TuneSetBalance(TunePlayer tp, long balance)
  2507. ;
  2508.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2509.         Macro
  2510.         _TuneSetBalance
  2511.             move.l              #$0004001A,-(sp)
  2512.             moveq               #0,D0
  2513.             dc.w                $A82A
  2514.         EndM
  2515.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2516.         IMPORT_CFM_FUNCTION TuneSetBalance
  2517.     ENDIF
  2518.  
  2519. ;
  2520. ; pascal ComponentResult TuneSetSoundLocalization(TunePlayer tp, Handle data)
  2521. ;
  2522.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2523.         Macro
  2524.         _TuneSetSoundLocalization
  2525.             move.l              #$0004001B,-(sp)
  2526.             moveq               #0,D0
  2527.             dc.w                $A82A
  2528.         EndM
  2529.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2530.         IMPORT_CFM_FUNCTION TuneSetSoundLocalization
  2531.     ENDIF
  2532.  
  2533. ;
  2534. ; pascal ComponentResult TuneSetHeaderWithSize(TunePlayer tp, unsigned long *header, unsigned long size)
  2535. ;
  2536.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2537.         Macro
  2538.         _TuneSetHeaderWithSize
  2539.             move.l              #$0008001C,-(sp)
  2540.             moveq               #0,D0
  2541.             dc.w                $A82A
  2542.         EndM
  2543.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2544.         IMPORT_CFM_FUNCTION TuneSetHeaderWithSize
  2545.     ENDIF
  2546.  
  2547. ;  flags for part mix. 
  2548.  
  2549. kTuneMixMute                    EQU        1                    ; disable a part 
  2550. kTuneMixSolo                    EQU        2                    ; if any parts soloed, play only soloed parts 
  2551.  
  2552. ;
  2553. ; pascal ComponentResult TuneSetPartMix(TunePlayer tp, unsigned long partNumber, long volume, long balance, long mixFlags)
  2554. ;
  2555.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2556.         Macro
  2557.         _TuneSetPartMix
  2558.             move.l              #$0010001D,-(sp)
  2559.             moveq               #0,D0
  2560.             dc.w                $A82A
  2561.         EndM
  2562.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2563.         IMPORT_CFM_FUNCTION TuneSetPartMix
  2564.     ENDIF
  2565.  
  2566. ;
  2567. ; pascal ComponentResult TuneGetPartMix(TunePlayer tp, unsigned long partNumber, long *volumeOut, long *balanceOut, long *mixFlagsOut)
  2568. ;
  2569.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2570.         Macro
  2571.         _TuneGetPartMix
  2572.             move.l              #$0010001E,-(sp)
  2573.             moveq               #0,D0
  2574.             dc.w                $A82A
  2575.         EndM
  2576.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2577.         IMPORT_CFM_FUNCTION TuneGetPartMix
  2578.     ENDIF
  2579.  
  2580.  
  2581.  
  2582.  
  2583.  
  2584. ; typedef unsigned long                 MusicOpWord
  2585.  
  2586. ; typedef unsigned long *                MusicOpWordPtr
  2587.  
  2588. ;      QuickTime Music Track Event Formats:
  2589. ;
  2590. ;    At this time, QuickTime music tracks support 5 different event types -- REST events,
  2591. ;    short NOTE events, short CONTROL events, short GENERAL events, Long NOTE events, 
  2592. ;    long CONTROL events, and variable GENERAL events.
  2593. ;        • REST Event (4 bytes/event):
  2594. ;    
  2595. ;            (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
  2596. ;        
  2597. ;        • Short NOTE Events (4 bytes/event):
  2598. ;    
  2599. ;            (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
  2600. ;        
  2601. ;            where:    Pitch is offset by 32 (Actual pitch = pitch field + 32)
  2602. ;
  2603. ;        • Short CONTROL Events (4 bytes/event):
  2604. ;    
  2605. ;            (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign) (7-bit MSB) (7-bit LSB)
  2606. ;                                                                         ( or 15-bit Signed Value)
  2607. ;        • Short GENERAL Event (4 bytes/event):
  2608. ;    
  2609. ;            (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
  2610. ;    
  2611. ;        • Long NOTE Events (8 bytes/event):
  2612. ;    
  2613. ;            (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED) (7-bit Volume)
  2614. ;            (1 0) (8-bit UNUSED) (22-bit Duration)
  2615. ;        
  2616. ;        • Long CONTROL Event (8 bytes/event):
  2617. ;        
  2618. ;            (1 0 1 0) (12-bit Part) (16-bit Value MSB) 
  2619. ;            (1 0) (14-bit Controller) (16-bit Value LSB)
  2620. ;    
  2621. ;        • Long KNOB Event (8 bytes/event):
  2622. ;    
  2623. ;            (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
  2624. ;            (1 0) (14-bit KNOB) (16-bit Value LSB)
  2625. ;    
  2626. ;        • Variable GENERAL Length Events (N bytes/event):
  2627. ;    
  2628. ;            (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
  2629. ;                :
  2630. ;            (32-bit Data values)
  2631. ;                :
  2632. ;            (1 1) (14-bit UNUSED) (16-bit Length)
  2633. ;    
  2634. ;            where:    Length field is the number of LONG words in the record.
  2635. ;                    Lengths include the first and last long words (Minimum length = 2)
  2636. ;                
  2637. ;    The following event type values have not been used yet and are reserved for 
  2638. ;    future expansion:
  2639. ;        
  2640. ;        • (1 0 0 0)        (8 bytes/event)
  2641. ;        • (1 1 0 0)        (N bytes/event)
  2642. ;        • (1 1 0 1)        (N bytes/event)
  2643. ;        • (1 1 1 0)        (N bytes/event)
  2644. ;        
  2645. ;    For all events, the following generalizations apply:
  2646. ;    
  2647. ;        -    All duration values are specified in Millisecond units.
  2648. ;        -     Pitch values are intended to map directly to the MIDI key numbers.
  2649. ;        -    Controllers from 0 to 127 correspond to the standard MIDI controllers.
  2650. ;            Controllers greater than 127 correspond to other controls (i.e., Pitch Bend, 
  2651. ;            Key Pressure, and Channel Pressure).    
  2652. ;
  2653.  
  2654.  
  2655. ;  Defines for the implemented music event data fields
  2656.  
  2657. kRestEventType                    EQU        $00000000            ; lower 3-bits 
  2658. kNoteEventType                    EQU        $00000001            ; lower 3-bits 
  2659. kControlEventType                EQU        $00000002            ; lower 3-bits 
  2660. kMarkerEventType                EQU        $00000003            ; lower 3-bits 
  2661. kUndefined1EventType            EQU        $00000008            ; 4-bits 
  2662. kXNoteEventType                    EQU        $00000009            ; 4-bits 
  2663. kXControlEventType                EQU        $0000000A            ; 4-bits 
  2664. kKnobEventType                    EQU        $0000000B            ; 4-bits 
  2665. kUndefined2EventType            EQU        $0000000C            ; 4-bits 
  2666. kUndefined3EventType            EQU        $0000000D            ; 4-bits 
  2667. kUndefined4EventType            EQU        $0000000E            ; 4-bits 
  2668. kGeneralEventType                EQU        $0000000F            ; 4-bits 
  2669. kXEventLengthBits                EQU        $00000002            ; 2 bits: indicates 8-byte event record 
  2670. kGeneralEventLengthBits            EQU        $00000003            ; 2 bits: indicates variable length event record 
  2671. kEventLen                        EQU        1                    ; length of events in long words 
  2672. kXEventLen                        EQU        2
  2673. kRestEventLen                    EQU        1                    ; length of events in long words 
  2674. kNoteEventLen                    EQU        1
  2675. kControlEventLen                EQU        1
  2676. kMarkerEventLen                    EQU        1
  2677. kXNoteEventLen                    EQU        2
  2678. kXControlEventLen                EQU        2
  2679. kGeneralEventLen                EQU        2                    ; 2 or more, however 
  2680.                                                             ; Universal Event Defines
  2681. kEventLengthFieldPos            EQU        30                    ; by looking at these two bits of the 1st or last word              
  2682. kEventLengthFieldWidth            EQU        2                    ; of an event you can determine the event length                      
  2683.                                                             ; length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length 
  2684. kEventTypeFieldPos                EQU        29                    ; event type field for short events 
  2685. kEventTypeFieldWidth            EQU        3                    ; short type is 3 bits 
  2686. kXEventTypeFieldPos                EQU        28                    ; event type field for extended events 
  2687. kXEventTypeFieldWidth            EQU        4                    ; extended type is 4 bits 
  2688. kEventPartFieldPos                EQU        24
  2689. kEventPartFieldWidth            EQU        5
  2690. kXEventPartFieldPos                EQU        16                    ; in the 1st long word 
  2691. kXEventPartFieldWidth            EQU        12                    ; Rest Events
  2692. kRestEventDurationFieldPos        EQU        0
  2693. kRestEventDurationFieldWidth    EQU        24
  2694. kRestEventDurationMax            EQU        $00FFFFFF            ; Note Events
  2695. kNoteEventPitchFieldPos            EQU        18
  2696. kNoteEventPitchFieldWidth        EQU        6
  2697. kNoteEventPitchOffset            EQU        32                    ; add to value in pitch field to get actual pitch 
  2698. kNoteEventVolumeFieldPos        EQU        11
  2699. kNoteEventVolumeFieldWidth        EQU        7
  2700. kNoteEventVolumeOffset            EQU        0                    ; add to value in volume field to get actual volume 
  2701. kNoteEventDurationFieldPos        EQU        0
  2702. kNoteEventDurationFieldWidth    EQU        11
  2703. kNoteEventDurationMax            EQU        $000007FF
  2704. kXNoteEventPitchFieldPos        EQU        0                    ; in the 1st long word 
  2705. kXNoteEventPitchFieldWidth        EQU        16
  2706. kXNoteEventDurationFieldPos        EQU        0                    ; in the 2nd long word 
  2707. kXNoteEventDurationFieldWidth    EQU        22
  2708. kXNoteEventDurationMax            EQU        $003FFFFF
  2709. kXNoteEventVolumeFieldPos        EQU        22                    ; in the 2nd long word 
  2710. kXNoteEventVolumeFieldWidth        EQU        7                    ; Control Events
  2711. kControlEventControllerFieldPos    EQU        16
  2712. kControlEventControllerFieldWidth EQU    8
  2713. kControlEventValueFieldPos        EQU        0
  2714. kControlEventValueFieldWidth    EQU        16
  2715. kXControlEventControllerFieldPos EQU    0                    ; in the 2nd long word 
  2716. kXControlEventControllerFieldWidth EQU    16
  2717. kXControlEventValueFieldPos        EQU        0                    ; in the 1st long word 
  2718. kXControlEventValueFieldWidth    EQU        16                    ; Knob Events
  2719. kKnobEventValueHighFieldPos        EQU        0                    ; 1st long word 
  2720. kKnobEventValueHighFieldWidth    EQU        16
  2721. kKnobEventKnobFieldPos            EQU        16                    ; 2nd long word 
  2722. kKnobEventKnobFieldWidth        EQU        14
  2723. kKnobEventValueLowFieldPos        EQU        0                    ; 2nd long word 
  2724. kKnobEventValueLowFieldWidth    EQU        16                    ; Marker Events
  2725. kMarkerEventSubtypeFieldPos        EQU        16
  2726. kMarkerEventSubtypeFieldWidth    EQU        8
  2727. kMarkerEventValueFieldPos        EQU        0
  2728. kMarkerEventValueFieldWidth        EQU        16                    ; General Events
  2729. kGeneralEventSubtypeFieldPos    EQU        16                    ; in the last long word 
  2730. kGeneralEventSubtypeFieldWidth    EQU        14
  2731. kGeneralEventLengthFieldPos        EQU        0                    ; in the 1st & last long words 
  2732. kGeneralEventLengthFieldWidth    EQU        16
  2733.     IF TARGET_RT_LITTLE_ENDIAN THEN
  2734.  
  2735. kEndMarkerValue                    EQU        $00000060
  2736.     ELSE
  2737.  
  2738. kEndMarkerValue                    EQU        $60000000
  2739.     ENDIF    ; TARGET_RT_LITTLE_ENDIAN
  2740. ;  General Event Defined Types
  2741.  
  2742. kGeneralEventNoteRequest        EQU        1                    ; Encapsulates NoteRequest data structure 
  2743. kGeneralEventPartKey            EQU        4
  2744. kGeneralEventTuneDifference        EQU        5                    ; Contains a standard sequence, with end marker, for the tune difference of a sequence piece (halts QuickTime 2.0 Music) 
  2745. kGeneralEventAtomicInstrument    EQU        6                    ; Encapsulates AtomicInstrument record 
  2746. kGeneralEventKnob                EQU        7                    ; knobID/knobValue pairs; smallest event is 4 longs 
  2747. kGeneralEventMIDIChannel        EQU        8                    ; used in tune header, one longword identifies the midi channel it originally came from 
  2748. kGeneralEventPartChange            EQU        9                    ; used in tune sequence, one longword identifies the tune part which can now take over this part's note channel (similar to program change) (halts QuickTime 2.0 Music)
  2749. kGeneralEventNoOp                EQU        10                    ; guaranteed to do nothing and be ignored. (halts QuickTime 2.0 Music) 
  2750. kGeneralEventUsedNotes            EQU        11                    ; four longwords specifying which midi notes are actually used, 0..127 msb to lsb 
  2751. kGeneralEventPartMix            EQU        12                    ; three longwords: Fixed volume, long balance, long flags 
  2752. ;  Marker Event Defined Types        // marker is 60 ee vv vv in hex, where e = event type, and v = value
  2753.  
  2754. kMarkerEventEnd                    EQU        0                    ; marker type 0 means: value 0 - stop, value != 0 - ignore
  2755. kMarkerEventBeat                EQU        1                    ; value 0 = single beat; anything else is 65536ths-of-a-beat (quarter note)
  2756. kMarkerEventTempo                EQU        2                    ; value same as beat marker, but indicates that a tempo event should be computed (based on where the next beat or tempo marker is) and emitted upon export
  2757.  
  2758. kCurrentlyNativeEndian            EQU        1
  2759. kCurrentlyNotNativeEndian        EQU        2
  2760. ;  UPP call backs 
  2761.  
  2762.     ENDIF ; __QUICKTIMEMUSIC__ 
  2763.  
  2764.